簡體   English   中英

如何使用 Node.js 中的 XSLT 轉換 HTML 字符串

[英]How to transform HTML string using XSLT in Node.js

我有一個來自 Node.js 應用程序的字符串,我需要在服務器端使用 XSLT 進行轉換。 我需要做的主要“轉換”是刪除特定的 HTML 標簽,由於安全/性能問題,我不能使用正則表達式。 我還將使用轉換結果向 API 發出 POST 請求。

一個簡單的示例可能類似於:

"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Aliquam porttitor gravida velit, et facilisis est viverra a. Suspendisse potenti.</p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Suspendisse potenti.</p>"

而且我需要將其轉換為以下內容(在這種情況下基本上只是刪除<p>標記):

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Aliquam porttitor gravida velit, et facilisis est viverra a. Suspendisse potenti.\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Suspendisse potenti."

以下是我的主要問題:

  • 我可以使用 saxon-js 進行這些更改嗎? 如果是這樣,我正在努力弄清楚如何基於他們的文檔。
  • 還有另一種方法可以在節點應用程序上實現 XSLT 嗎?

好吧,我上鈎了,下面是使用 SaxonJS 的方法:

const SaxonJS = require("saxon-js")

var input = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Aliquam porttitor gravida velit, et facilisis est viverra a. Suspendisse potenti.</p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed suscipit felis. Suspendisse potenti.</p>";

const xslt = `<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
  <xsl:output method="text"/>
</xsl:stylesheet>`;

var result = SaxonJS.XPath.evaluate(`transform(
  map {
    'source-node' : parse-xml-fragment($xml),
    'stylesheet-text' : $xslt,
    'delivery-format' : 'serialized'
    }
)?output`,
[],
{ params : {
    xml : input,
    xslt : xslt
  }
});
   
 console.log(result);

使用 output 方法文本將刪除所有元素,如果您不希望使用默認值並添加<xsl:mode on-no-match="shallow-skip"/>並為您要保留的元素添加模板,例如<xsl:template match="h1"><xsl:copy><xsl:apply-templates/></xsl:copy></xsl:template>或以其他方式接近它並使用<xsl:mode on-no-match="shallow-copy"/>並通過匹配模板阻止您不想要的內容,例如<xsl:template match="p"><xsl:apply-templates/></xsl:template>

最后,一旦您的樣式表工作並完成,您應該使用例如xslt3 -nogo -xsl:sheet.xsl -export:sheet.sef.json將其“編譯”為 SEF/JSON,然后使用直接轉換 API 從JavaScript 例如SaxonJS.transform

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM