Xslt 一些正确的XPath表达式不';I don’我没有按预期工作
在获取注册表数据后,我正在对WiX生成的文件进行XML转换。对于那些不熟悉WIX的人,只要考虑一下,我试着在XML文件上进行XML传输,不管它来自哪里。我遇到的问题是:当我像Xslt 一些正确的XPath表达式不';I don’我没有按预期工作,xslt,xpath,wix,Xslt,Xpath,Wix,在获取注册表数据后,我正在对WiX生成的文件进行XML转换。对于那些不熟悉WIX的人,只要考虑一下,我试着在XML文件上进行XML传输,不管它来自哪里。我遇到的问题是:当我像 match="node()[name() = 'File'][not(@KeyPath)]" 然后匹配工作正常,它会找到所有缺少KeyPath属性的文件节点,但是,如果我使用另一个XPath表达式,比如 match="//File[not(@KeyPath)]" 那它就找不到匹配的了 一般来说,我不能将标准XPath与
match="node()[name() = 'File'][not(@KeyPath)]"
然后匹配工作正常,它会找到所有缺少KeyPath属性的文件节点,但是,如果我使用另一个XPath表达式,比如
match="//File[not(@KeyPath)]"
那它就找不到匹配的了
一般来说,我不能将标准XPath与/、//、..一起使用,但是,下面的一篇文章中有一个XPath示例,效果很好
<xsl:template match="node()[name() = 'File']
[contains(@Source, 'First.dll') or
contains(@Source, 'Second.dll')]
[not(@Assembly)]">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:attribute name="Assembly">.net</xsl:attribute>
<xsl:attribute name="KeyPath">yes</xsl:attribute>
</xsl:copy>
</xsl:template>
.net
对
但是像
/bookstore/book[@lang='en']
这样的东西是行不通的。也许,我在XSL文件的开头缺少了一些描述,以便识别像这样的XPath。这是因为XML文件中的节点几乎肯定位于名称空间中
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
那么你的匹配表达式就变成了
<xsl:template match="//wix:File[not(@KeyPath)]" />
请发布一个可复制的示例-请参阅:。非常感谢,蒂姆!
<xsl:template match="//wix:File[not(@KeyPath)]" />
<xsl:template match="wix:File[not(@KeyPath)]" />