用于提取文本并将其放在别处的XSLT语法?

时间:2013-06-03 18:29:22

标签: xml xslt xpath

我有一个大致如下的XML文档:

<doc>
 <header> 
  Here is a header thing. 
 </header>  
 <docBody>
  Here is a long string of text in which other tags like <person>Me</person> appear. 
 </docBody> 
</doc> 

我的XSL看起来像这样:

<xsl:template match="header"> <!--get header stuff--> 
 <myHeader>
  <xsl:apply-templates/>  
 </myHeader> 
</xsl:template> 

<xsl:template match="docBody"> <!--get body stuff--> 
 <myBody> 
  <xsl:apply-templates/> 
 <myBody>  
</xsl:template> 

输出大致是:

<myHeader> 
   Here is a header thing. 
</myHeader> 

<myBody>
  Here is a long string of text in which other tags like Me appear. 
</myBody> 

<person>标记消失的位置。我注意到我可以做到

<xsl:template match="person">
 <myPerson>
  <xsl:apply-templates/> 
 </myPerson> 
</xsl:template> 

但是,由于我不明白的原因,当php simplexml_load_string()函数解析它时,我得到这个输出,可能是因为它不包含子元素:

<myBody>
 Here is a long string of text in which other tags like appear. 
</myBody>

神秘地遗漏了<person>标签之间的文字。

我想输出的是:

<myBody> 
 Here is a long string of text in which other tags like Me appear. 
</myBody> 

<person> 
 Me
</person> 

有办法吗?

1 个答案:

答案 0 :(得分:2)

您描述的输出不太可能由您显示和描述的模板生成。从您显示的模板中,我希望docBody模板的输出为

<myBody>
Here is a long string of text in which other tags like 
<myPerson>
Me
</myPerson>
appear.
</myBody>

我怀疑你没有告诉我们有相关的东西。

但你说你想要的行为可以通过以下方式实现:

<xsl:template match="docBody">
  <myBody><xsl:value-of select="string(.)"/></myBody>
  <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="person">
  <person><xsl:apply-templates/></person>
</xsl:template>