C# Trim()使用c语言计算xml文档中所有xml元素和属性的值#

C# Trim()使用c语言计算xml文档中所有xml元素和属性的值#,c#,xml,C#,Xml,我正试图找出一种最简单的方法来处理xml,如下所示: <Car> <Description Model="Ford ">Blue </Description> </Car> 蓝色 为此: <Car> <Description Model="Ford">Blue</Description> </Car> 蓝色 使用LINQ到XML,类似于: foreach (var e

我正试图找出一种最简单的方法来处理xml,如下所示:

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

蓝色
为此:

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

蓝色

使用LINQ到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();
    }    
}
foreach(doc.subjects()中的var元素)
{
foreach(element.Attributes()中的var属性)
{
attribute.Value=attribute.Value.Trim();
}
foreach(类型()的元素.Nodes()中的var textNode)
{
textNode.Value=textNode.Value.Trim();
}    
}

我想这应该行得通。。。我不认为您需要使用
ToList
来避免在迭代过程中出现干扰,因为您没有更改XML文档的结构,只是更改文本。

使用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();
    }    
}
foreach(doc.subjects()中的var元素)
{
foreach(element.Attributes()中的var属性)
{
attribute.Value=attribute.Value.Trim();
}
foreach(类型()的元素.Nodes()中的var textNode)
{
textNode.Value=textNode.Value.Trim();
}    
}

我想这应该行得通。。。我认为您不需要使用
ToList
来避免在迭代过程中出现干扰,因为您没有更改XML文档的结构,只更改文本。

试试这个。别忘了通过子节点递归

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);
    }
}

试试这个。别忘了通过子节点递归

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);
    }
}

如果您没有使用或不能使用LINQtoXML,那么下面的内容对我使用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);
        }
    }
}

如果您没有使用或不能使用LINQtoXML,那么下面的内容对我使用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);
        }
    }
}

这不管用。如果我有蓝-红,它返回蓝色Red@user1152145:好的,我会解决它。@user1152145:现在试试。基本上,我现在分别处理文本节点。这不起作用。如果我有蓝-红,它返回蓝色Red@user1152145:好的,我会解决它。@user1152145:现在试试。基本上,我现在分别处理文本节点。