XSLT 标头问题
Posted
技术标签:
【中文标题】XSLT 标头问题【英文标题】:XSLT header problems 【发布时间】:2018-03-31 09:59:30 【问题描述】:当前标题
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Factuur_insbou003.xsd">
新标题
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.gs1.nl/factuur/insbou/004"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.gs1.nl/factuur/insbou/004
Factuur_insbou004.xsd">
我试过了:
<?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="/*[local-name()= 'Invoice']">
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.gs1.nl/factuur/insbou/004"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:copy-of select="node()|@*"/>
</Invoice>
</xsl:template>
</xsl:stylesheet>
你是对的(删除了错误的代码),我的问题是创建 xmlns="http://www.gs1.nl/factuur/insbou/004"。希望您能够帮助我。谢谢
【问题讨论】:
不清楚是什么问题…… 问题:我无法添加xmlns="gs1.nl/factuur/insbou/004" 【参考方案1】:您必须了解命名空间是文档中每个元素的限定名称的一部分,因此您需要更改每个元素的命名空间,例如
<xsl:template match="*">
<xsl:element name="local-name()">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
然后在您的样式表根目录上,您可以简单地声明您想要的命名空间。但是由于您还想向根元素添加一个属性并省略另一个属性,因此您还需要一个模板来执行此操作,因此您需要进行所有更改
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns="http://www.gs1.nl/factuur/insbou/004"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Invoice">
<Invoice
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.gs1.nl/factuur/insbou/004
Factuur_insbou004.xsd">
<xsl:apply-templates/>
</Invoice>
</xsl:template>
<xsl:template match="*">
<xsl:element name="local-name()">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:transform>
【讨论】:
以上是关于XSLT 标头问题的主要内容,如果未能解决你的问题,请参考以下文章
XSLT转换需要添加SOAP信封并在SOAP标头和正文之间拆分XML