我有一个大致如下的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>
有办法吗?
答案 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>