Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换Xml标记_C#_Visual Studio - Fatal编程技术网

C# 转换Xml标记

C# 转换Xml标记,c#,visual-studio,C#,Visual Studio,在my xml中,一些xml元素为空,例如: <A></A> 因此,我想修改上面所示类型的元素,将其转换为类型元素,那么我们如何在C#中进行转换,并在文件中进行更新。以下是我的想法: private static void FormatEmptyNodes(XmlNode rootNode) { foreach (XmlNode childNode in rootNode.ChildNodes) { FormatEmptyNodes(

在my xml中,一些xml元素为空,例如:

<A></A>


因此,我想修改上面所示类型的元素,将其转换为
类型元素,那么我们如何在C#中进行转换,并在文件中进行更新。

以下是我的想法:

private static void FormatEmptyNodes(XmlNode rootNode)
{
    foreach (XmlNode childNode in rootNode.ChildNodes)
    {
        FormatEmptyNodes(childNode);

        if(childNode is XmlElement)
        {
            XmlElement element = (XmlElement) childNode;
            if (string.IsNullOrEmpty(element.InnerText)) element.IsEmpty = true;
        }
    }
}
然后像这样使用它:

var doc = new XmlDocument();
doc.Load(inputFilePath);
FormatEmptyNodes(doc);
doc.Save(outputFilePath);
而在您的场景中,您可以使用它来使用模式
清理传入字符串,并替换

System.Text.RegularExpressions.Regex.Replace(
“foo”:


转换为
的原因是什么?从任何xml解析器的角度来看,语法都没有区别-那么为什么还要麻烦呢?在C#中解析xml文件时,可以将标记标识为IsEmptyElement方法,但不能使用XmlReader类和中的IsEmptyElement方法来标识标记xml中的一些空元素将表示为,一些表示为。因此,为了维护单个结构,我们希望将空标记转换为,例如to。因此,如果任何新用户正在阅读,他们将看到唯一的结构,可能是
System.Text.RegularExpressions.Regex.Replace(
  "foo <a></a> bar <a>not empty</a> <tag></tag>",
  "<([A-Za-z0-9_.]+)></\\1>",
  "<$1/>")
foo <a/> bar <a>not empty</a> <tag/>