我需要循环遍历具有多个内部节点的XML。我有一个样本xml,如下所示
<?xml version ="1.0" encoding ="utf-8" ?>
<TestUser>
<Users>
<UserData name="test123" address="USA"/>
<UserCommunication>
<Communication mode="Te" value="123456879"/>
<Qualification>
<PG value="No"></PG>
</Qualification>
<Qualification>
<UG value="YES"></UG>
</Qualification>
</UserCommunication>
</Users>
<Users>
<UserData name="test124" address="UK"/>
<UserCommunication>
<Communication mode="Te" value="1567894525"/>
<Qualification>
<PG value="No"></PG>
</Qualification>
<Qualification>
<UG value="YES"></UG>
</Qualification>
</UserCommunication>
</Users>
<Users>
<UserData name="test125" address="INDIA"/>
<UserCommunication>
<Communication mode="Te" value="5465897845"/>
<Qualification>
<PG value="YES"></PG>
</Qualification>
<Qualification>
<UG value="YES"></UG>
</Qualification>
</UserCommunication>
</Users>
</TestUser>
输出应该在文本视图中,如下所示
test123 USA Te 123456879 No YES
test124 UK Te 1567894525 No YES
test125 INDIA Te 5465897845 YES No
我也在HTML视图中需要它。
任何人都可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
假设使用XSLT 2.0,您只需使用
即可<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="//Users/string-join(.//@*, ' ')" separator=" "/>
</xsl:template>
</xsl:stylesheet>
,结果是
test123 USA Te 123456879 No YES
test124 UK Te 1567894525 No YES
test125 INDIA Te 5465897845 YES YES
如果您想要HTML输出,那么您可以使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<pre>
<xsl:value-of select="//Users/string-join(.//@*, ' ')" separator=" "/>
</pre>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
使用相同的方法或当然是编写模板以匹配并将Users
映射到HTML tr
元素和模板以匹配并将Users//*/@*
映射到HTML td
元件。