您好我有一个关于循环浏览xml文档的问题,并返回文档元素的子子子元素(例如prop1,prop2,item1,item2,country1,country2)及其所属的孩子(例如人,姓名,地址) )元素名称。
我有以下XML文档:
<data>
<person>
<properties>
<prop1>test</prop1>
<prop2>test</prop2>
</properties>
</person>
<name>
<properties>
<item1>test</item1>
<item2>test</item2>
</properties>
</name>
<address>
<properties>
<country1>test</country1>
<country2>test</country2>
</properties>
</address>
</data>
我想要的输出是:
person prop1
person prop2
name item1
name item2
address country1
address country2
我设法生成以下列表: 人 名称 地址
应用此XSLT转换。:
<xsl:template match="*/*|@*">
<xsl:value-of select="name()"/>
<xsl:apply-templates select="@*"/>
</xsl:template>
谁能告诉我应该怎么做?感谢
答案 0 :(得分:2)
我相信你想这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/data">
<xsl:for-each select="*/properties/*">
<xsl:value-of select="name(../..)" />
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
试试这个XSLT-1.0片段:
#! /bin/bash
./script&
pid=$!
sleep 10
echo $string > /proc/${pid}/fd/0
输出为:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="text()" />
<xsl:template match="/data/*">
<xsl:for-each select="properties/*">
<xsl:value-of select="concat(name(../..),' ',name(),' ')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:1)
简短而简单的完全拉动式转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*/*/*/*">
<xsl:value-of select="concat(name(../..),' ',name(),'
')"/>
</xsl:template>
</xsl:stylesheet>
注意强>:
没有必要使用任何<xsl:for-each>
- 只需让XSLT处理模型和XSLT处理器完成它们的工作。