Я нобе, когда дело доходит до программирования с помощью 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>
Выход я хочу иметь это структура папок/Объект/первый/деталь. Что я делаю не так? Я получаю сообщение об ошибке, что я не могу создать выходной файл. У вас есть какие-либо советы по xpath, потому что я предполагаю, что мой xpath не делает этого правильно. Благодаря
В ваш путь не входит «doNot» (один из элементов «@name»). Вы хотите его исключить? Кроме того, ваш первый шаблон имеет «OtherObject» как @name .., но путь к папке, который вы хотите, имеет «Object». Какой узел вы хотите обработать? –