gpt4 book ai didi

c# - 删除所有 CDATA 节点并替换为编码文本

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

所以,我有一个庞大的 XML 文件,我想删除所有 CDATA 部分,并用安全的 html 编码文本节点替换 CDATA 节点内容。

用正则表达式去除 CDATA 当然会破坏解析。是否有 LINQ 或 XmlDocument 或 XmlTextWriter 技术用编码文本换出 CDATA?

我还不太关心最终的编码,只是如何用我选择的编码替换这些部分。

原始示例

  ---
<COLLECTION type="presentation" autoplay="false">
<TITLE><![CDATA[Rights & Responsibilities]]></TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE><![CDATA[Watch the demo]]></TITLE>
<LINK><![CDATA[_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4]]></LINK>
</ITEM>
</COLLECTION>
---

灵魂成为

          <COLLECTION type="presentation" autoplay="false">
<TITLE>Rights &amp; Responsibilities</TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE>Watch the demo</TITLE>
<LINK>_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4</LINK>
</ITEM>
</COLLECTION>

我想最终目标是转向 JSON。这个我试过了

            XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath( @"~/somefile.xml"));
string jsonText = JsonConvert.SerializeXmlNode(doc);

但我最终得到了丑陋的节点,即“#cdata-section”键。重新开发前端需要 WAAAAY 几个小时才能接受这一点。

"COLLECTION":[{"@type":"whitepaper","TITLE":{"#cdata-section":"SUPPORTING DOCUMENTS"}},{"@type":"presentation","@autoplay":"false","TITLE":{"#cdata-section":"Demo Presentation"},"ITEM":{"@id":"2802725d-dbac-e011-bcd6-005056af18ff","@presenterGender":"male","TITLE":{"#cdata-section":"Watch the demo"},"LINK":{"#cdata-section":"_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4"}

最佳答案

使用仅将输入复制到输出的 XSLT 处理 XML - C# 代码:

  XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(@"c:\temp\id.xslt");
transform.Transform(@"c:\temp\cdata.xml", @"c:\temp\clean.xml");

id.xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>

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

关于c# - 删除所有 CDATA 节点并替换为编码文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10543421/

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