XSLT:XML根元素不匹配

huangapple go评论56阅读模式
英文:

XSLT: XML Root element not matched

问题

这次,然而,我遇到了问题 "起飞",即:由于某种奇怪的原因,当我命名它时,XML 根元素没有匹配。然而,当我只使用 / 时,它将会匹配。

让我们开始看一下 XML 文档的大纲(我没有编写它; "专业公司" 创建这样的):

<?xml version="1.0" encoding="utf-8"?>
<PartnerMasterDataSet xmlns="http://tempuri.org/PartnerMasterDataSet.xsd">
  <Partner>
    <Id>40</Id>
<!-- ... -->
  </Partner>
</PartnerMasterDataSet>

最后一行没有尾随的 EOL 序列(如果有关系的话)。
有多个类似 Id 的元素(以及多个 Partner)。

我在我的 XSL 中尝试了什么:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />

<xsl:template match="/PartnerMasterDataSet">
  <table>
<!-- <xsl:apply-templates select="Partner" /> -->
  </table>
</xsl:template>
</xsl:stylesheet>

我正在使用 libxslt-tools-1.1.28 中的 xsltproc 来处理输入,如果重要的话。

当使用 match="/" 时,我得到了一个匹配(详细消息),如下所示:

xsltProcessOneNode: applying template '/' for /
xsltApplySequenceConstructor: copy text root

然而,当我使用 match="/PartnerMasterDataSet"(或 match="//PartnerMasterDataSet")时,我没有匹配,这一点我不明白。

然后,消息如下:

xsltProcessOneNode: no template found for /
xsltProcessOneNode: no template found for PartnerMasterDataSet
英文:

I'm a XSLT beginner, but managed to write one successful transformation in the recent past.

This time, however I'm having trouble "lifting off", i.e.: For some odd reason the XML root element isn't matched when I name it.
However it will be matched when I use just /.

Let's start seeing the outline of the XML document (I didn't write that; "professional companies" create such):

<?xml version="1.0" encoding="utf-8"?>
<PartnerMasterDataSet xmlns="http://tempuri.org/PartnerMasterDataSet.xsd">
  <Partner>
    <Id>40</Id>
<!-- ... -->
  </Partner>
</PartnerMasterDataSet>

The final line has no trailing EOL sequence (in case that matters).
There are multiple elements like Id (and multiple Partners).

What I tried in my XSL:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />

<xsl:template match="/PartnerMasterDataSet">
  <table>
<!-- <xsl:apply-templates select="Partner" /> -->
  </table>
</xsl:template>
</xsl:stylesheet>

I'm using xsltproc from libxslt-tools-1.1.28 to process the input, in case it's important.

When using match="/", I get a match (verbose messages) like this:

xsltProcessOneNode: applying template '/' for /
xsltApplySequenceConstructor: copy text root

However when I use match="/PartnerMasterDataSet" (or match="//PartnerMasterDataSet"), the I don't get a match, which I don't understand.

Then the messages are:

xsltProcessOneNode: no template found for /
xsltProcessOneNode: no template found for PartnerMasterDataSet

答案1

得分: 1

将命名空间添加到您的脚本中...

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xx="http://tempuri.org/PartnerMasterDataSet.xsd">
  <xsl:output indent="yes" />
  <xsl:template match="/xx:PartnerMasterDataSet">
    <table>
    </table>
  </xsl:template>
</xsl:stylesheet>
英文:

just add the namespace to your script...

&lt;xsl:stylesheet version=&quot;1.0&quot;
                xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
xmlns:xx=&quot;http://tempuri.org/PartnerMasterDataSet.xsd&quot;&gt;
&lt;xsl:output indent=&quot;yes&quot; /&gt;
&lt;xsl:template match=&quot;/xx:PartnerMasterDataSet&quot;&gt;
  &lt;table&gt;
  &lt;/table&gt;
&lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;

huangapple
  • 本文由 发表于 2023年6月6日 15:25:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/76412287.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定