循环遍历动态 xml 树以将其展平
Loop through dynamic xml tree to flatten it
我想制作一个样式表并使用 xslt/xpath 遍历我的树,但我无法用这个 xml 做基础。这 xml 适用于 xslt/xpath 吗?
我想通过 examId 遍历考试并检查 examType
<data>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<string key="planCode">01267 COE-EN/2014-08-01</string>
<string key="planName">01267 COE-EN</string>
<map key="exams">
<string key="examId">00131105</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90404 S Interact. vormgev.</string>
<array key="exams">
<map>
<string key="examId">00162650</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90402 S Interact. vormgev.</string>
</map>
<map>
<string key="examId">00162640</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90403 S Interact. vormgev.</string>
</map>
</array>
</map>
</map>
</data>
XSLT for what its worth...
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/data/map/string/@key ">
<test>Test</test>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Edit;
The answer helped me a lot and I could finally address the elements and attributes. I think it was because I didnt use the namespace xpath-default-namespace="http://www.w3.org/2005/xpath-functions"
-----------
给定地图元素上的命名空间声明,该路径仅在使用通配符 /data/*:map/*:string/@key
或声明例如xmlns:fn="http://www.w3.org/2005/xpath-functions"
在您的样式表中并使用例如/data/fn:map/fn:string/@key
或在样式表中声明 xpath-default-namespace="http://www.w3.org/2005/xpath-functions"
并使用 /*:data/map/string/@key
或 /*/map/string/@key
.
要展平,请使用 //
,如 /data//*:string[@key = 'examType']
我想制作一个样式表并使用 xslt/xpath 遍历我的树,但我无法用这个 xml 做基础。这 xml 适用于 xslt/xpath 吗?
我想通过 examId 遍历考试并检查 examType
<data>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<string key="planCode">01267 COE-EN/2014-08-01</string>
<string key="planName">01267 COE-EN</string>
<map key="exams">
<string key="examId">00131105</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90404 S Interact. vormgev.</string>
<array key="exams">
<map>
<string key="examId">00162650</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90402 S Interact. vormgev.</string>
</map>
<map>
<string key="examId">00162640</string>
<string key="examType">Kwalificatie</string>
<string key="examName">90403 S Interact. vormgev.</string>
</map>
</array>
</map>
</map>
</data>
XSLT for what its worth...
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/data/map/string/@key ">
<test>Test</test>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Edit;
The answer helped me a lot and I could finally address the elements and attributes. I think it was because I didnt use the namespace xpath-default-namespace="http://www.w3.org/2005/xpath-functions"
-----------
给定地图元素上的命名空间声明,该路径仅在使用通配符 /data/*:map/*:string/@key
或声明例如xmlns:fn="http://www.w3.org/2005/xpath-functions"
在您的样式表中并使用例如/data/fn:map/fn:string/@key
或在样式表中声明 xpath-default-namespace="http://www.w3.org/2005/xpath-functions"
并使用 /*:data/map/string/@key
或 /*/map/string/@key
.
要展平,请使用 //
,如 /data//*:string[@key = 'examType']