【问题标题】:Parsing XML with XSLT causing issue at ROOT node使用 XSLT 解析 XML 导致 ROOT 节点出现问题
【发布时间】:2015-01-19 11:17:42
【问题描述】:

我有一个必须用 xslt 解析的 xml 文件,但问题是在根节点中我有一个链接,它不允许我解析 xml 文件。如果我从 xml 文件中删除该链接,我可以解析该文件。 xml 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ROOT xmlns="http://link.org/3.2.1">
  <TOP-LEVEL-PACKAGES>
    <AR-PACKAGE>
      <SHORT-NAME>ActiveEcu</SHORT-NAME>
</AR-PACKAGE>
</TOP-LEVEL-PACKAGES>
</ROOT>

但我不应该修改 xml 文件,所以我需要一个解决方案来解析它而不删除该链接。 有什么解决办法吗?

【问题讨论】:

    标签: xml xslt hyperlink parsexml


    【解决方案1】:

    在样式表节点中添加类似这样的内容 xmlns:ns1="link.org/3.2.1";然后在引用根节点时使用以下语法:ns1:ROOT

    基本上,您的 ROOT 节点与代表 URL 的默认命名空间相关联。 在 xslt 模板中,您必须向 URL 提及 namspace,以告诉 XSLT 解析器 ROOT 节点属于该特定命名空间

    事实上,给定 xml 的所有子节点都属于 URL 表示的默认命名空间

    例如

    <xsl:stylesheet version="1.0" 
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                                 exclude-result-prefixes="xsl"
                    xmlns:ns1="http://link.org/3.2.1">
      <xsl:template match="/">
        <xsl:value-of select="ns1:ROOT"/>
      </xsl:template>
    </xsl:stylesheet>
    

    【讨论】:

    • 感谢您的回答 Saurav,但我已经尝试过了,但它似乎不起作用.. :(
    • 你能发一下xslt吗
    • &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:ns="http://link.org/3.2.1"&gt; &lt;xsl:template match="/"&gt; Name= &lt;xsl:value-of select="ns:ROOT/TOP-LEVEL-PACKAGES/AR-PACKAGE/SHORT-NAME"/&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt;
    • @ArianaBitu:请不要尝试在评论框中发布代码。如您所见,它非常难以阅读。此外,cmets 可能随时被删除,并且不应包含重要信息。相反,edit 您的问题并将其插入其中。
    • 请使用以下 ns:ROOT/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:SHORT-NAME 我在回答中提到您的所有子节点也属于那个网址
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2011-06-13
    • 2012-03-21
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多