XSLT可能被“忽略”的一般原因:
-
输入XML在一个或多个命名空间中,显式地或默认地,
并且XSLT正在与没有名称空间的元素进行匹配见
下面的XSLT介绍如何与命名空间元素匹配。
-
在
输入XML和XSLT。
-
所提供的XSLT模板都不匹配,只有
built-in
template rules
继续执行转换。
旁注:
您当前的输出实际上不是发布的XSLT为发布的XML输入文件生成的输出它将根据标识转换将输入XSLT复制到输出XSLT,然后
Line
和
Lines
模板将不起作用,因为没有
生产线
或
线
输入XML中的元素。
你的具体案例:
您可以打开
Subheader1
和
Subheader2
元素通过以下XSLT:
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:neo="urn:stuff:xml:ns:neo">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="neo:Subheader1 | neo:Subheader2">
<xsl:apply-templates select="node() | @*"/>
</xsl:template>
</xsl:stylesheet>
XML输出
<Header xmlns="urn:stuff:xml:ns:neo">
<ID>1</ID>
<Department>350</Department>
<Date>2019-03-07T14:38:00</Date>
<Order_Number>12345</Order_Number>
<Comment/>
<Status>Picking</Status>
<Product>12510101</Product>
<Quantity>1</Quantity>
<Comment_Line/>
<Location>R11</Location>
</Header>
文本节点
您可以通过
<xsl:strip-space elements="neo:Subheader1 neo:Subheader2"/>
添加到
xsl:stylesheet
,或者您可能只想复制
要素
(
*
)这两个元素的子元素,而不是所有的子元素
node()
学生:
<xsl:template match="neo:Subheader1 | neo:Subheader2">
<xsl:apply-templates select="* | @*"/>
</xsl:template>
请注意
| @*
在这里并不需要,但是如果你的实际案例有属性的话,可以帮助你同样,请注意,您可以添加回
processing-instruction()|comment()
如果更改后需要此类子类型
节点()
到
*
.