代码之家  ›  专栏  ›  技术社区  ›  typemismatch

使用C的XML中的CDATA#

  •  0
  • typemismatch  · 技术社区  · 15 年前

    这是一种不寻常的情况。我们被迫与第三方接口,第三方要求包装XML响应中的某些值,即使它只是一个字符串值。

    Example: <Property name="someName" type="String"><![CDATA[someValue]]></Property>
    

    我们将这些属性节点添加到文档中,如下所示:

    XPathExpression query = xPathNavigator.Compile(xpath);
    
    XPathNavigator node = xPathNavigator.SelectSingleNode(query.Expression, xmlNamespaceManager);
    
    string property = "<Property name='someName' type='String'><![CDATA[someValue]]></Property>";
    
    node.AppendChild(property);
    

    问题是,生成的XML如下所示

    <Property name="someName" type="String">someValue</Property>
    

    CDATA不断被剥离。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Fredrik Mörk    15 年前

    您可以通过使用xmlwriter写入数据来实现这一点:

    private static void WriteProperty(XmlWriter writer, string name, string type, string value)
    {
        writer.WriteStartElement("Property");
        writer.WriteAttributeString("name", name);
        writer.WriteAttributeString("type", type);
        writer.WriteCData(value);
        writer.WriteEndElement();
    
    }
    
    // call the method from your code
    XPathExpression query = xPathNavigator.Compile(xpath);    
    XPathNavigator node = xPathNavigator.SelectSingleNode(query.Expression, xmlNamespaceManager);
    using (XmlWriter writer = node.AppendChild())
    {
        WriteProperty(writer, "someName", "String", "someValue");
    }
    
        2
  •  0
  •   maxwellb    15 年前

    您可能需要检查node.appendchild().writeraw(属性)是否可以工作,因为您似乎仍在手动格式化XML字符串。