XSL:如何获得两个不同匹配的结果
Posted
技术标签:
【中文标题】XSL:如何获得两个不同匹配的结果【英文标题】:XSL : how to obtain the result of two different match 【发布时间】:2016-08-29 23:25:44 【问题描述】:我愿意创建一个修改根节点属性的 XSL 文档,但它也能够更改 XML 文档的内容。
这是我的 XSL 文档:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="some:ns">
<xsl:output indent="yes" method="xml" encoding="UTF-8" />
<xsl:strip-space elements="*"/>
<ns:WhiteList>
<name>HEADER</name>
<name>ROOTNODE</name>
<name>foo</name>
<name>bar</name>
<name>toto</name>
</ns:WhiteList>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROOTNODE[@xsi:id = 'myXSDFile.xsd'] ">
<xsl:copy>
<xsl:attribute name="xsi:id ">myXSDFCleansedFile.xsd</xsl:attribute>
<xsl:apply-templates select="ROOTNODE[@xsi:id = 'myXSDFile.xsd']"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(descendant-or-self::*[name()=document('')/*/ns:WhiteList/*])]"/>
</xsl:stylesheet>
我输入的 XML 文档如下:
<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFile.xsd">
<HEADER>
....
</HEADER>
<foo>blabla</foo>
<bar>blabla</bar>
<tab>dada</tab>
<toto>blabla</toto>
<titi>blabla</titi>
</ELIX>
我得到的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFileCleansed.xsd">
或者:
<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFile.xsd">
<HEADER>
....
</HEADER>
<foo>blabla</foo>
<bar>blabla</bar>
<toto>blabla</toto>
</ROOTNODE>
但问题是我想要第二个输出,但更改了 xsd 文件名!而且我没有成功合并两条不同的匹配路径。您知道如何合并两个匹配路径吗?
【问题讨论】:
【参考方案1】:我没有得到你的确切尝试。但首先,如果您在应用 xsl 时不想处理子项,请尝试替换:
<xsl:apply-templates select="ROOTNODE[@xsi:id = 'myXSDFile.xsd']"/>
与
<xsl:apply-templates/>
当您在模板中时,上下文为ROOTNODE
,当您尝试将模板应用于"ROOTNODE[...]"
时,处理器正在寻找名为ROOTNODE
的上下文的子级。
【讨论】:
以上是关于XSL:如何获得两个不同匹配的结果的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 Elastic Search 中获得完全匹配过滤器结果
给定通过不同的 `SemanticModel` 实例获得的匹配 IMethodSymbol 对象,如何获取 IMethodSymbol 对象?