根據我的研究,xsd 似乎無法在指定元素中生成 CDATA 標簽。我知道這可能是 XSD 規范的一個限制,我可以轉向其他一些作業流程來解決這個問題。
在我們當前的 XSD 作業流程中,問題是我們必須手動添加 CDATA 標簽。這個 one 元素是一個 HTML 塊,我們必須對它進行轉義。因此,我們的 XSD --> XML 作業流程有點混亂,因為我們發現自己需要手動添加 CDATA 標記。
建議的作業流程/解決方案是什么?
(在 VSCode 中,我們從現有的 XSD 手動創建 XML 檔案——如果有幫助,我們可以轉換為 DTD 或其他模板格式。這不是一個真正的 XSD 問題[除非您有關于 XSD 的新資訊......]是一個“我們應該如何重新思考滿足我們需求的方法”的問題。)
uj5u.com熱心網友回復:
這是為您提供的解決方案。只需使用遵循所謂的身份轉換模式的 XSLT 轉換即可。
最重要的 XSLT 允許指定哪些 XML 元素需要CData部分。
該cdata-section-elements屬性允許定義一個空格分隔的 XML 元素名稱串列。這些元素中的每一個都作為目標檔案中的 CDATA 部分輸出。
看看下面。XSLT 指定<title>元素值需要一個 CData 部分。
它記錄在這里:http : //www.w3.org/TR/xslt20/#serialization
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:g="http://base.google.com/ns/1.0">
<xsl:output method="xml" indent="yes" cdata-section-elements="title" encoding="utf-8" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
XSD 中的設計假設是 CDATA 標簽沒有資訊內容:書寫<a><![CDATA[Tate & Lyle]]></a>與書寫完全相同<a>Tate & Lyle</a>,任何應用程式都不應該要求您優先撰寫這些形式中的一種。因此,XSD 試圖通過不對它們進行任何區分來鼓勵良好實踐。如果您想通過進行這樣的區分來忽略(這種想法)好的實踐,那么 XSD 不會從設計上幫助您。
uj5u.com熱心網友回復:
正如其他人指出的那樣,XSD或XML DTD無法要求將元素內容決議為 CDATA,或者推斷(而不是單獨撰寫)圍繞元素內容的 CDATA 部分標記。另一方面,SGML DTD確實允許元素具有宣告的內容 CDATA(或 RCDATA),這使得 SGML 將相應的內容視為未決議的字符資料,即通過忽略標記分隔符<和(對于 CDATA但不是 RCDATA)物體參考起始字符&。具有 CDATA 宣告的內容對于決議 HTML 是必要的,例如。行內 CSS 或腳本包含否則會被解釋為標記分隔符的字符。
指出這一點是因為您宣告的目標是包含逐字 HTML,這在使用 XML 時不起作用,因為 HTML 使用了 SGML 的 XML 子集中不可用的功能,例如標記遺漏、空元素和屬性簡寫等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389679.html
上一篇:如何使用序列化程式使帶有自關閉標記的XML標記成為必需?
下一篇:比較果凍腳本中的2個變數
