仅选择一个要处理的节点

时间:2014-10-28 08:17:40

标签: xml xslt xpath xslt-2.0

在使用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不对我。感谢

1 个答案:

答案 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">