在使用xpath或xslt进行编程时,我很高兴。我试图只选择要处理的指定节点,并在此过程中为每个元素创建文件夹。这是我的测试xml我正在使用:
XML:
<Sandbox>
<Unknow name="Unknow">
<Property name="unknow" value="unknow"/>
</Unknow>
<View name="Object">
<Element name="first" value="1">
<Property name="great" value="10"/>
<Element name="detail" value="3">
<Property name="shiny" value="30"/>
<Element name="doNot" value="0">
<Property name="non" value="0"/>
</Element>
</Element>
</Element>
</View>
<View name="OtherObject">
<Element name="second" value="2">
<Property name="greater" value="20"/>
<Element name="detail" value="4">
<Property name="dark" value="40"/>
<Element name="doNot" value="0">
<Property name="non" value="0"/>
</Element>
</Element>
</Element>
</View>
</Sandbox>
XSLT
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="Sandbox/View[@name='OtherObject']">
<xsl:apply-templates select="//Element"/>
</xsl:template>
<xsl:template match="Element">
<xsl:result-document href="{string-join(ancestor-or-self::Element,'/')}/{concat(@name,'_',position())}.xml">
<item>
<xsl:copy-of select="."/>
</item>
</xsl:result-document>
</xsl:template>
我想要的输出是文件夹结构/ Object / first / detail。我究竟做错了什么?我收到一个错误,我无法创建输出文件。你有什么建议在xpath cuz我猜我的xpath不对我。感谢
答案 0 :(得分:0)
有关
<xsl:template match="Sandbox/View[@name='OtherObject']">
<xsl:apply-templates select="//Element"/>
</xsl:template>
你可能想要
<xsl:template match="/">
<xsl:apply-templates select="Sandbox/View[@name='OtherObject']//Element"/>
</xsl:template>
至于<xsl:result-document href="{string-join(ancestor-or-self::Element,'/')}/{concat(@name,'_',position())}.xml">
,请发布确切的错误消息,并告诉我们您要构建哪些文件夹名称和文件名。
<xsl:result-document href="{string-join(ancestor-or-self::Element,'/')}/{concat(@name,'_',position())}.xml">