Найти, если файл XML содержит указанное пространство имен c, используя XSLT - PullRequest
1 голос
/ 20 марта 2020

Кто-нибудь знает, могу ли я узнать, содержит ли мой файл xml определенное пространство имен (где никакие элементы не имеют этого имени).

Что-то среди строк

<xsl:if test="count(xmlns:name)!=0" >

</xsl:if>

это не работает, так как я получаю сообщение об ошибке "префикс xmlns" не определен.

Ответы [ 2 ]

1 голос
/ 21 марта 2020

выясните, содержит ли мой файл xml определенное пространство имен (где никаким элементам не дано это имя).

Трудно понять, что именно вы подразумеваете под этим. Если вы хотите выяснить, содержит ли вход XML объявление пространства имен с использованием заданного URI пространства имен, независимо от того, используется ли это объявление для размещения какого-либо из узлов XML в указанном пространстве имен или нет, вы можете использовать тест в виде:

<xsl:if test="//namespace::*[.='your-namespace-URI']">

Пример:

XML

<root xmlns:ns1="http://example.com/a">
    <item>Alpha</item>
    <item>Bravo</item>
    <item>Charlie</item>
</root>

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <result>
        <xsl:if test="//namespace::*[.='http://example.com/a']">YES</xsl:if>
    </result>
</xsl:template>

</xsl:stylesheet>

Результат

<?xml version="1.0" encoding="UTF-8"?>
<result>YES</result>

Результат здесь положительный, хотя XML не имеет узлов, которые на самом деле находятся в "http://example.com/a" пространство имен.

0 голосов
/ 20 марта 2020

Вы можете проверить, например, //pf:* при объявлении xmlns:pf="http://example.com/ns" в своем коде XSLT, чтобы проверить, есть ли какие-либо элементы в пространстве имен http://example.com/ns. Или вы можете проверить //*[namespace-uri() = 'http://example.com/ns'] без объявления пространства имен в XSLT. Обе проверки предполагают, что пространство имен означает определенный URI пространства имен, а не определенный префикс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...