我有以下XML:
<section editable="true">
<p>If you have any questions about the project at Test School or how we plan to use the results, please contact <contact>Al c</contact><contact_info> at <contact_email>email address</contact_email> or <contact_phone>phone number</contact_phone>.</contact_info></p>
<p>Your feedback is valuable, and <strong>I</strong> want to thank you personally for considering this request.</p>
<p>Sincerely,</p>
</section>
我有一个新要求来创建这个表单:
<textarea>If you have any questions about the project at Test School or how we plan to use the results, please contact</textarea>
<input type="text" value="Al c " />
<input type="text" value="at email address or phone number." />
<textarea>Your feedback is valuable, and I want to thank you personally for considering this request.
Sincerely,</textarea>
文本输入很简单,之前我能够为该部分创建一个大的文本区域,但是我在最近几个小时的工作中尝试使用previous-sibling ::和follow-sibling ::来处理no成功。我确定我只是错过了一些简单的东西。
答案 0 :(得分:2)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kFollowing" match="p[not(contact | contact_info)]"
use="generate-id(preceding-sibling::*
[not(self::p)
or
not(contact | contact_info)
]
[1]
)"/>
<xsl:template match="/*">
<xsl:apply-templates select="*[1]"/>
</xsl:template>
<xsl:template match="p/text()">
<textarea><xsl:value-of select="."/></textarea>
</xsl:template>
<xsl:template match="p[contact | contact_info]">
<xsl:apply-templates/>
<xsl:apply-templates select="following-sibling::*[1]"/>
</xsl:template>
<xsl:template match="contact | contact_info">
<input type="text" value="{normalize-space()}"/>
</xsl:template>
<xsl:template match="p[not(contact | contact_info)][1]">
<textarea>
<xsl:copy-of select=
"(.|key('kFollowing', generate-id()))//text()"/>
</textarea>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<section editable="true">
<p>If you have any questions about the project at Test School or how we plan to use the results, please contact
<contact>Al c</contact>
<contact_info> at
<contact_email>email address</contact_email> or
<contact_phone>phone number</contact_phone>.
</contact_info>
</p>
<p>Your feedback is valuable, and
<strong>I</strong> want to thank you personally for considering this request.
</p>
<p>Sincerely,</p>
</section>
生成想要的正确结果:
<textarea>If you have any questions about the project at Test School or how we plan to use the results, please contact
</textarea>
<input type="text" value="Al c"/>
<input type="text" value="at email address or phone number."/>
<textarea>Your feedback is valuable, and
I want to thank you personally for considering this request.
Sincerely,</textarea>