【问题标题】:InnerXML Replace not working with XMLDOCUMENTInnerXML Replace 不适用于 XMLDOCUMENT
【发布时间】:2021-03-09 22:52:18
【问题描述】:

我有一个 XML 文件:

<IMG0></IMG0>
<IMG1></IMG1>
<IMG2></IMG2>

它最多代表 10 个图像。

我尝试删除拥有的号码:

<IMG></IMG>
<IMG></IMG>
<IMG></IMG>

我做:

for (int l = 0; l <= 10; l++)
{
      doc.InnerXml.Replace("IMG" + l, "IMG");
}

“doc”是一个 XMLDocument。

但是节点没有变化。

我能做什么?

【问题讨论】:

  • 一方面,您没有将Replace 操作的结果分配到任何地方,因此该循环实质上会修改字符串并将它们丢弃。其次,这也会破坏任何可能被称为例如的图像。 IMG0030.jpg,因为字符串替换操作不区分标签和文本。您应该遍历 XML 树并在那里修复节点名称。
  • 这能回答你的问题吗? How does one parse XML files?
  • 这能回答你的问题吗? Change the node names in an XML file using C#
  • XML 应该是格式良好的。这种情况最好使用 XSLT。

标签: c# xml


【解决方案1】:

通过使用 XSLT 和 Identity Transform 模式。

第二个模板将查找以“IMG”开头的任何 XML 元素并将其转换为“IMG”,同时保持其他所有内容原样。

XML

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <Betalningsmottagares_x0020_postnr>401 01</Betalningsmottagares_x0020_postnr>
   <Betalningsmottagares_x0020_postort>Göteborg</Betalningsmottagares_x0020_postort>
   <IMG0>10</IMG0>
   <IMG1>20</IMG1>
   <IMG2>30</IMG2>
</root>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="*[starts-with(local-name(), 'IMG')]">
        <IMG>
            <xsl:value-of select="."/>
        </IMG>
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

输出

<?xml version='1.0' encoding='utf-8' ?>
<root>
  <Betalningsmottagares_x0020_postnr>401 01</Betalningsmottagares_x0020_postnr>
  <Betalningsmottagares_x0020_postort>Göteborg</Betalningsmottagares_x0020_postort>
  <IMG>10</IMG>10
  <IMG>20</IMG>20
  <IMG>30</IMG>30
</root>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2020-06-09
    • 2012-01-11
    • 2016-10-02
    • 2020-05-16
    相关资源
    最近更新 更多