默认打印 XSLT 1.0 文本节点

2023-11-22

我看过XSL xsl:模板匹配=“/”但那里没有提到触发我的问题的匹配模式。

我有一个相当复杂的 XML 结构:

<?xml version="1.0" encoding="UTF-8"?>
<MATERIAL_DATA>
<LOG>
    <USER>Peter</USER>
    <DATE>2011-02-18</DATE>
    <MATERIALS>
        <item>
            <MATNR>636207</MATNR>
            <TEXTS>
                <item>
                    <TEXT>granola bar 40gx24</TEXT>
                </item>
            </TEXTS>
            <PRICES>
                <item>
                    <MATNR>636207</MATNR>
                    <COST>125.78</COST>
                </item>
            </PRICES>
            <SALESPRICES>
                <item>
                    <B01>
                        <MATNR>636207</MATNR>
                        <CURR>CZK</CURR>
                        <DATBI>9999-12-31</DATBI>
                        <DATAB>2010-10-05</DATAB>
                    </B01>
                    <B02>
                        <item>
                            <PRICE>477.60</PRICE>
                            <KUNNR>234567</KUNNR>
                        </item>
                    </B02>
                </item>
            </SALESPRICES>
        </item>
    </MATERIALS>
</LOG>
</MATERIAL_DATA>

现在,如果我应用以下 XSLT,我的输出看起来是正确的:

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

<xsl:template match="node() | @*">
    <xsl:apply-templates select="* | @*" />
</xsl:template>

<xsl:template match="B02">
    <xsl:element name="Mi">
        <xsl:value-of select="item/KUNNR"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

我得到输出:

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

但如果我应用 XSLT:

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

<xsl:output method="xml" indent="yes" encoding="UTF-8"/>

<xsl:template match="/*">
    <xsl:element name="MenuItems">
        <xsl:apply-templates select="LOG/MATERIALS/item/SALESPRICES/item"/>
    </xsl:element>
 </xsl:template>
 
<xsl:template match="B02">
    <xsl:element name="Mi">
        <xsl:value-of select="item/KUNNR"/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

输出如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<MenuItems>
                    
                        636207
                        CZK
                        9999-12-31
                        2010-10-05
<Mi>234567</Mi>
</MenuItems>

元素中的所有值<B01>在输出中!但为什么——我不匹配<B01>!? 如何

<xsl:template match="node() | @*">
<xsl:apply-templates select="* | @*" />
</xsl:template>

使输出正确吗?我所做的就是匹配所有节点或属性并将模板应用于所有内容或所有属性。 但在我看来,当我完全匹配时,这应该不会产生影响<B01>! 为什么会发生这种情况?


XSLT 包括以下内容默认模板 (除其他外):

<!-- applies to both element nodes and the root node -->
<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>

<!-- copies values of text and attribute nodes through -->
<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>

在您的第一个样式表中,您隐式地将所有文本节点与node(),从而覆盖默认操作。然后,在B2模板,您输出目标值并且不应用进一步的模板,这将停止处理。

在第二个样式表中,您显式地将模板应用于LOG/MATERIALS/item/SALESPRICES/item,导致默认模板处理您未显式处理的节点。因为你明确处理B2如果不将模板应用于其子节点,则永远不会为这些节点调用默认模板。但默认模板are适用于 的孩子B1.

将以下模板添加到第二个样式表将覆盖文本节点的默认操作:

<xsl:template match="text()|@*"></xsl:template>

结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<MenuItems><Mi>234567</Mi></MenuItems>

More:

  • http://www.w3.org/TR/xslt#built-in-rule
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认打印 XSLT 1.0 文本节点 的相关文章

随机推荐

  • RXTX 在 Windows 7 64 位下无法列出或找到端口

    早上好 我在 Windows 7 64 位上使用 或安装 rxtx 时遇到问题 我之前在 x86 win XP 系统上使用过它 没有出现任何问题 由于由于某种原因重新安装到这个新系统 rxtx 无法找到任何端口 我尝试过 rxtx 安装 C
  • C中整数的大小[重复]

    这个问题在这里已经有答案了 可能的重复 int 的大小是否取决于编译器和 或处理器 整数的大小是否取决于编译器 操作系统或处理器 如果我在 32 位操作系统或 64 位操作系统上使用 gcc 并在 32 位计算机或 64 位计算机上运行 在
  • 如何让 Emacs 启动更快?

    I use Emacsv 22 控制台版本 可以远程使用PuTTY或本地与Konsole 作为我在 Linux 上的主要文本编辑器 每次启动时都需要一段时间来加载 可能几乎一秒钟 尽管我从未计时 我经常打开和关闭 Emacs 因为我更喜欢使
  • 在 R 中的同一数据框中绑定具有相似列名的列

    我有一个看起来有点像这样的数据框 df lt data frame 0 2 1 3 2 4 5 7 6 8 2 4 0 2 1 3 2 4 colnames df lt rep c a b c 3 gt df a b c a b c a b
  • 从 Zip 文件中删除文件夹

    我正在尝试从 Zip 文件中删除文件夹 所以我的文件结构是这样的 首先内部 我尝试使用这里的代码从 Zip 中删除文件作者 Siddharth Rout 但它只移动文件 显然文件夹变空了 但并未从 Zip 中删除 Code Sub del
  • 以编程方式添加的捆绑产品未显示在前端

    我正在尝试从 PHP 脚本将捆绑产品插入 Magento 数据库 有问题的版本是社区 1 5 1 0 我尝试了问题中描述的方法 使用简单商品的 SKU ID 以编程方式在 Magento 中添加捆绑产品 插入的产品在管理部分中显示得很好 我
  • 是否应该在 Web 应用程序中禁用实体框架延迟加载?

    我听说您应该在 Web 应用程序中禁用 EF 的延迟加载功能 ASP NET Here and here 对于初学者 现在我在这里真的很困惑 因为我一直认为应该始终启用延迟加载 因为它可以防止从数据库获取不必要的数据 所以 现在我的问题是
  • 在 iOS Core Data 中存储高精度纬度/经度数字

    我正在尝试将纬度 经度存储在核心数据中 这些最终精度为 6 到 20 位 无论出于何种原因 我将它们作为核心数据中的浮点数 将它们四舍五入而不给我返回确切的值 我尝试了 十进制 类型 但也没有运气 NSStrings 是我唯一的选择吗 ED
  • grunt-contrib-jasmine 和 PhantomJS 安全性

    我收到错误 XMLHttpRequest 无法加载https my api domain com Access Control Allow Origin 不允许 Origin file 当我尝试运行一些通过 grunt contrib ja
  • 使用关联数组的 D3 日历视图

    我想创建一个日历视图 如下例所示 http bl ocks org 4063318 其实我正在尝试修改它 我有一个像这样的关联数组 AdminCourt 2012 10 02 2 2012 10 09 2 2012 10 16 1 Cons
  • Java 无法使用正则表达式 \s,显示:无效的转义序列

    我想用 替换字符串中的所有空白字符 用 ss 替换所有 它对于 效果很好 但不知何故 eclipse 不允许我使用 s 作为空白 我尝试了 t 但它也不起作用 我收到以下错误 无效的转义序列 有效的转义序列 是 b t n f r 这是我的
  • 将元素值反序列化为字符串,尽管它包含混合内容

    假设这样的 XML
  • 将数据框日期列的 dd-mm-yyyy 日期格式更改为 yyyy-mm-dd [重复]

    这个问题在这里已经有答案了 我有这个熊猫数据框df Name Date Score Score2 Joe 26 12 2007 53 45 53 4500 Joe 27 12 2007 52 38 52 7399 Joe 28 12 200
  • 单元测试控制台 C# 应用程序的最佳方法

    我有一个简单的控制台应用程序 它是用一个普通的 main 来触发的 整个程序都在 main 中 它使用命令行解析器库 然后 我在解决方案中有第二个项目 其中包含应用程序的单元测试 但我似乎没有找到从测试中启动主程序进程的好方法 我当前实际启
  • 如何获取UIImage的dpi/ppi?

    iOS 中如何获取图像的 dpi ppi 也许原始图像文件包含这些信息 所以我可以从 NSData 获取 ppi dpi 谢谢 要从 NSData 中存储的图像中提取 DPI 请在项目中包含 Apple 的 ImageIO 框架并使用以下命
  • ASP.NET MVC3:通过控制器加载图像

    我尝试使用来自的答案here 但没有成功 我有以下代码 public ActionResult ShowImage using FileStream stream new FileStream Path Combine Server Map
  • 在 Jupyter Notebook 中使用 Tkinter

    我刚刚开始使用 Tkinter 并尝试在 python 中创建一个简单的弹出框 我从网站上复制粘贴了一段简单的代码 from Tkinter import master Tk Label master text First Name gri
  • 如何在kafka中创建新的消费者组

    我按照快速入门指南上的说明在本地运行 kafkahere 然后我在中定义了我的消费者组配置config consumer properties这样我的消费者就可以从定义的中选择消息group id 运行以下命令 bin kafka cons
  • 在 Twitter Bootstrap 的 ScrollSpy 中,我到底可以在哪里放置 data-spy="scroll" ?

    文档上说得很清楚 只需将 data spy scroll 添加到您想要监视的元素 最典型的是主体 但看来只有戴在身上才能发挥作用 当我将其放入我想要监视的任何其他元素时 导航的最后一个元素将被选中 Here它在身体上 并且有效 并且this
  • 默认打印 XSLT 1.0 文本节点

    我看过XSL xsl 模板匹配 但那里没有提到触发我的问题的匹配模式 我有一个相当复杂的 XML 结构