使用c#修剪()xml文档中所有xml元素和属性的值

时间:2013-07-17 19:13:27

标签: c# xml

我正在试图找出像这样采用xml的最简单方法:

<Car>
 <Description Model="Ford      ">Blue     </Description>
</Car>

进入这个:

<Car>
  <Description Model="Ford">Blue</Description>
</Car>

3 个答案:

答案 0 :(得分:7)

使用LINQ to XML,如下所示:

foreach (var element in doc.Descendants())
{
    foreach (var attribute in element.Attributes())
    {
        attribute.Value = attribute.Value.Trim();
    }
    foreach (var textNode in element.Nodes().OfType<XText>())
    {
        textNode.Value = textNode.Value.Trim();
    }    
}

认为应该有效...我不相信你需要使用ToList来避免在迭代时干扰事情,因为你没有改变结构XML文档,只是文本。

答案 1 :(得分:0)

试试这个。不要忘记通过您的ChildNodes进行递归......

protected void Page_Load(object sender, EventArgs e)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(@"c:\temp\cars.xml");
    Recurse(doc.ChildNodes);
}
private void Recurse(XmlNodeList nodes)
{
    foreach (XmlNode node in nodes)
    {
        if (node.InnerText != null)
            node.InnerText = node.InnerText.Trim();

        if (node.Attributes != null)
        {
            foreach (XmlAttribute att in node.Attributes)
                att.Value = att.Value.Trim();
        }

        Recurse(node.ChildNodes);
    }
}

答案 2 :(得分:0)

如果您不使用或不能使用LINQ to XML,那么以下内容对于XmlDocument来说对我来说很好用

TrimXmlText(xmlDocument.ChildNodes);

private void TrimXmlText(XmlNodeList xmlNodeList)
{
    foreach (XmlNode xmlNode in xmlNodeList)
    {
        if (xmlNode.NodeType == XmlNodeType.Text)
        {
            xmlNode.InnerText = xmlNode.InnerText?.Trim();
        }
        else
        {
            TrimXmlText(xmlNode.ChildNodes);
        }
    }
}