gpt4 book ai didi

html - 标签位置正确的节点的 XSLT 输出 text()

转载 作者:数据小太阳 更新时间:2023-10-29 02:37:02 25 4
gpt4 key购买 nike

所以我有以下 XML 片段...

我需要将其放入 HTML 中。我想说的是,对于每个(部分),打印出该部分的文本,如果您看到 (b) 标签,则在单词周围输出该标签。但是我不确定该怎么做,因为我似乎只能输出 section 的 text()。

但我需要输出节点的 text() 以及操作该 text() 中的标签。

这是示例 XML:

<body>
<section>
<title>Response</title>
<p> Some info here <b> with some other tags</b> or lists like <ol> <li>something</li> </ol></p>
</section>
<section>Another section same format, sections are outputted as divs </section>
</body>

这是我目前所拥有的:

<div class="body">

<xsl:for-each select='topic/body/section'>

<div class="section">
<xsl:choose>
<xsl:when test="title">
<h2 class="title sectiontitle"><xsl:value-of select="title"/></h2>
</xsl:when>
<xsl:when test="p">
[I dont know what to put here? I need to output both the text of the paragraph tag but also the html tags inside of it..]
</xsl:when>
</xsl:choose>


</div>
</xsl:for-each>
</div>

所需的输出 - xml 中每个部分的此 html 代码块。

<div class="section">
<h2 class="title">Whatever my title is from the xml tag</h2>
<p> The text in the paragraph with the proper html tags like <b> and <u> </p>
</div>

最佳答案

这很简单。为每个要转换为 HTML 的元素编写一个模板。

您没有为其编写模板的所有节点都由身份模板处理,该模板将它们原封不动地复制到输出:

<!-- identity template -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>

<!-- <title> becomes <h2> -->
<xsl:template match="title">
<h2 class="title">
<xsl:apply-templates select="node() | @*" />
</h2>
</xsl:template>

<!-- <section> becomes <div> -->
<xsl:template match="section">
<div class="section">
<xsl:apply-templates select="node() | @*" />
</div>
</xsl:template>

<!-- <b> becomes <strong> -->
<xsl:template match="b">
<strong>
<xsl:apply-templates select="node() | @*" />
</strong>
</xsl:template>

XSLT 处理器为您处理所有递归(具体来说,<xsl:apply-templates> 会这样做),因此您的输入

<section>
<title> some text </title>
Some stuff there will have other tags like <b> this </b>
</section>

会变成

<div class="section">
<h2 class="title"> some text </h2>
Some stuff there will have other tags like <strong> this </strong>
</div>

由于身份模板复制节点未更改,因此您无需编写“将 <ul> 转换为 <ul>”的模板。这会自行发生。只有不是 HTML 的元素才需要它们自己的模板。

如果您想阻止某些内容出现在 HTML 中,请为它们编写一个空模板:

<xsl:template match="some/unwanted/element" />

关于html - 标签位置正确的节点的 XSLT 输出 text(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com