#xml #xslt #xpath
#xml #xslt #xpath
Вопрос:
У меня есть следующий фрагмент XML
<?xml version="1.0" encoding="UTF-8"?>
<Sheet version="1.0" xmlns:j="http://www.it.ojp.gov/jxdm/3.0.2">
<Subject xmlns="http://www.it.ojp.gov/jxdm/3.0.2">
<PersonName>
<PersonGivenName>EDWIN</PersonGivenName>
<PersonMiddleName>J</PersonMiddleName>
<PersonSurName>TURNER</PersonSurName>
</PersonName>
</Subject>
</Sheet>
Я использую попытку выбрать подлежащий узел со следующим XSLT
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="Sheet/Subject"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Я тестировал этот сегмент на http://www.shell-tools.net/index.php?op=xslt .
Что происходит, так это то, что если я запускаю преобразование с XML, как написано, атрибут select не совпадает. Однако, если я удалю пространство имен из подлежащего узла, оно правильно выберет данные.
Я ищу синтаксис относительно того, как заставить выбор работать с пространством имен, присоединенным к узлу Subject, поскольку именно так данные поступают из веб-службы.
Ответ №1:
Вам необходимо определить псевдоним для пространства имен sheet
документа. Xsl должен выглядеть следующим образом:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:sheet="http://www.it.ojp.gov/jxdm/3.0.2" <--- Define an alias
exclude-result-prefixes="sheet" <--- Prevent xslt from using this
namespace in the output document
>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="Sheet/sheet:Subject"/> <--- Use alias
</body>
</html>
</xsl:template>
</xsl:stylesheet>