Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT:替换没有原始节点的元素/节点';s文本_Xml_Xslt - Fatal编程技术网

Xml XSLT:替换没有原始节点的元素/节点';s文本

Xml XSLT:替换没有原始节点的元素/节点';s文本,xml,xslt,Xml,Xslt,我正在为一个项目玩XSLT,只是尝试使用一些XSLT函数来获得所需的输出,但遇到了一个我正在尝试解决的小问题。我看过很多关于替换的帖子,但到目前为止还没有一篇能解决这个看似简单的问题 鉴于此XML: <?xml version="1.0" encoding="UTF-8"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan&

我正在为一个项目玩XSLT,只是尝试使用一些XSLT函数来获得所需的输出,但遇到了一个我正在尝试解决的小问题。我看过很多关于替换的帖子,但到目前为止还没有一篇能解决这个看似简单的问题

鉴于此XML:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country><font size='8pt' name='Verdana' color='navy'/>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>

皇帝讽刺剧

但是,我得到的是下面的附加文本“美国”


皇帝讽刺剧

美国

这是我编写的XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>  
  <xsl:apply-templates/>  
  </body>
  </html>
</xsl:template>

<xsl:template match="cd">
  <div>
    <xsl:apply-templates select="title"/>  
   <xsl:apply-templates select="country"/>
  </div>
</xsl:template>

<xsl:template match="country">
<p>
<xsl:call-template name="replacement">
<xsl:with-param name="txt" select="."/>
</xsl:call-template>

<xsl:apply-templates/>
</p>
</xsl:template>

<xsl:template name="replacement">
<i><a href="wwww.google.com.au">GOOGLE </a> </i>
</xsl:template>

<xsl:template match="title">
  <b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>

我的CD收藏

有谁能给我一些建议,如何在没有国家元素的美国文本的情况下获得所需的输出


干杯,

您的模板匹配
国家/地区
包括以下说明:

<xsl:apply-templates/>

这将模板应用于
国家/地区的所有子节点,包括文本节点
“USA”
。您没有匹配
text()
的模板,因此这是由将文本复制到输出的处理


如果不希望发生这种情况,请删除
xsl:apply templates
指令(或添加一个模板以不同的方式处理文本节点)。

我已将您的问题回滚到我回答时的问题。请开始一个新问题,并在那里解释您的新问题。如果您遇到错误,请务必也引用错误消息。我向Michael道歉,我们似乎同时在进行更改。最初的帖子是我试图解决的问题的一个稍微简化的版本。我会根据要求创建一个新帖子,谢谢Michael!由于某些原因,我无法通过编辑添加此内容,因为我似乎被锁定了。为了进一步澄清,我想在最后补充的是。当且仅当测试
test=“contains($txt,[a')”>
为真时,我才试图实现类似的目标。如果测试
test=“contains($txt,[a')”>
为假,那么我只希望
围绕文本()运行元素的内容。@spikycactus如我所说,这与您原来的问题无关。请重新开始。抱歉,没有注意到您的评论。我现在将创建一个新帖子。干杯
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>  
  <xsl:apply-templates/>  
  </body>
  </html>
</xsl:template>

<xsl:template match="cd">
  <div>
    <xsl:apply-templates select="title"/>  
   <xsl:apply-templates select="country"/>
  </div>
</xsl:template>

<xsl:template match="country">
<p>
<xsl:call-template name="replacement">
<xsl:with-param name="txt" select="."/>
</xsl:call-template>

<xsl:apply-templates/>
</p>
</xsl:template>

<xsl:template name="replacement">
<i><a href="wwww.google.com.au">GOOGLE </a> </i>
</xsl:template>

<xsl:template match="title">
  <b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>
<xsl:apply-templates/>