Можно ли автоматически разрешать ссылки перед использованием XPath, чтобы
что я мог бы использовать выражения XPath, как
"//get_referencesResponse/Result/source/item
" или есть лучше
способ прочитать документ?
Используйте
/*/item[@id = substring(/*/Result/source/@href, 2)]
Проверка на основе XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/item[@id = substring(/*/Result/source/@href, 2)]"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML (ваш, но сделан правильно и добавлено item
с id=3
):
<SOAP-ENV:Body
xmlns:SOAP-ENV="some:SOAP-ENV"
xmlns:SOAP-ENC="some:SOAP-ENC"
xmlns:xsi="some:xsi">
<get_referencesResponse SOAP-ENC:root="1" id="i1">
<Result href="#i2"/>
</get_referencesResponse>
<Result SOAP-ENC:root="0" id="i2">
<source href="#i3"/>
<malware href="#i4"/> [...]
</Result>
<source SOAP-ENC:arrayType="xsd:string[2]"
SOAP-ENC:root="0" id="i3" xsi:type="SOAP-ENC:Array">
<item href="#i8"/>
<item href="#i9"/>
</source>
<malware SOAP-ENC:arrayType="xsd:string[7]"
SOAP-ENC:root="0" id="i4" xsi:type="SOAP-ENC:Array">
<item href="#i10"/>
<item href="#i11"/>
<item href="#i12"/> [...]
</malware> [...]
<item SOAP-ENC:root="0" id="i3"
xsi:type="xsd:string">name</item>
<item SOAP-ENC:root="0" id="i8"
xsi:type="xsd:string">address</item>
<item SOAP-ENC:root="0" id="i9"
xsi:type="xsd:string">network_prefix</item>
<item SOAP-ENC:root="0" id="i10" x
si:type="xsd:string">md5</item> [...]
</SOAP-ENV:Body>
вычисляется выражение Xpath и выводится выбранный элемент :
<item xmlns:SOAP-ENV="some:SOAP-ENV"
xmlns:SOAP-ENC="some:SOAP-ENC"
xmlns:xsi="some:xsi"
SOAP-ENC:root="0" id="i3" xsi:type="xsd:string">name</item>