gpt4 book ai didi

xml - 如何使用默认命名空间编写 XSL?

转载 作者:行者123 更新时间:2023-12-04 16:59:32 24 4
gpt4 key购买 nike

假设我有一个如下所示的 XML 文件:

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

<Project xmlns="http://My/Project.xsd">
<Thing Name="test"/>
</Project>

我的 XSLT 是:
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns="http://My/Project.xsd">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>

<xsl:template match="Thing">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>

输出为 [NewLine][Tab][NewLine]它与 XML 文件的间距相匹配。

如果我将 XSLT 更改为:(添加前缀)
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns:N="http://My/Project.xsd">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>

<xsl:template match="N:Thing">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>

输出为 [NewLine][Tab]test[NewLine]它再次匹配 XML 文件的间距,但包括“名称”属性的值。

我的预期输出只是 test .没有新行,没有选项卡 - 它根本不应该遵循 XML 文件的格式。

我想在不使用前缀的情况下编写 XML 和 XSLT。我怎样才能使这个输出达到我的期望?

最佳答案

这里有两个问题 - 首先是您不想指定 namespace 前缀,其次是您不想源文档中的空格影响您的输出。让我们分别讨论它们。

使用命名空间前缀:
简短的回答是否定的 - 您不能编写匹配特定命名空间中元素的 XSL 模板,而无需使用前缀指定此类命名空间。在您的第一个 XSLT 中,您可以阅读模板定义,例如“我想选择名为 Thing 的节点,其中 没有任何 命名空间”,而您真正想说的是“我想选择名为 Thing 的节点,其中 具有 命名空间” ”。这是 XPath 1.0 规范的工作方式(更多详细信息在 http://My/Project.xsd 文章中)。

去掉间距:
在样式表的开头使用 <xsl:strip-space elements="*"/> 指令来指定您不希望在输出文档中保留所有源元素的空格。如果你想保留其中的一些,也可以使用 <xsl:preserve-spaces elements="myNode">

关于xml - 如何使用默认命名空间编写 XSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com