【发布时间】:2018-03-28 00:23:53
【问题描述】:
我需要创建一个 XML 文件,其中包含属性中的换行符和制表符以及一些标签。所以我尝试如下。
string xmlID = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<PersonLib Version=\"1.0\"></PersonLib>";
XDocument doc = XDocument.Parse(xmlID);//, LoadOptions.PreserveWhitespace);
XElement device = doc.Root;
using (StringWriter str = new StringWriter())
using (XmlTextWriter xml = new XmlTextWriter(str))
{
xml.Formatting=Formatting.Indented;
xml.WriteStartElement("Details");
xml.WriteWhitespace("\n\t");
xml.WriteStartElement("Name");
xml.WriteWhitespace("\n\t\t");
xml.WriteStartElement("JohnDoe");
xml.WriteAttributeString("DOB", "10");
xml.WriteAttributeString("FirstName", "20");
xml.WriteAttributeString("LastName", "40");
xml.WriteAttributeString("\n\t\t\tAddress", "50");
xml.WriteAttributeString("\n\t\t\tPhoneNum", "60");
xml.WriteAttributeString("\n\t\t\tCity", "70");
xml.WriteAttributeString("\n\t\t\tState", "80");
xml.WriteAttributeString("\n\t\t\tCountry", "90");
//xml.WriteWhitespace("\n\t\t");
xml.WriteEndElement();
xml.WriteWhitespace("\n\t");
xml.WriteEndElement();
xml.WriteWhitespace("\n");
xml.WriteEndElement();
Console.WriteLine(str);
device.Add(XElement.Parse(str.ToString(), LoadOptions.PreserveWhitespace));
File.WriteAllText("MyXML.xml", device.ToString());
我可以生成所需格式的 XML,但在这种情况下,当我尝试将其添加到父 XMLElement device 时,问题就出现了。尽管LoadOptions.PreserveWhitespace,格式已经全部消失。
我明白了
<PersonLib Version="1.0">
<Details>
<Name>
<JohnDoe DOB="10" FirstName="20" LastName="40" Address="50" PhoneNum="60" City="70" State="80" Country"90" />
</Name>
</Details>
</PersonLib >
当我需要的时候
<PersonLib Version="1.0">
<Details>
<Name>
<JohnDoe DOB="10" FirstName="20" LastName="40"
Address="50"
PhoneNum="60"
City="70"
State="80"
Country="90" />
</Name>
</Details>
</PersonLib >
不知道我错过了什么。
【问题讨论】:
-
哦,这是一个糟糕的例子。我的元素名称中没有空格..我只是更正了它
-
如果你只是想让你的 xml 在新的一行中使用属性格式化,你可以看看这个问题:stackoverflow.com/questions/8237165/…
-
我想问你为什么觉得需要这样的输出。它只不过是一种在属性之间没有格式的 XML。您是否正在使用非 XML 进程来尝试解释它?
-
这个 xml 文件被输入到只接受上述格式的系统中。它是第三方工具,客户对该工具的输入格式非常严格。所以我们应该在 xml 中有这样的格式,以便用户使用这个 xmll
-
@Dweeberly 正如您在我的目标输出 XML 格式中看到的那样,并非所有属性都在新行中,我只希望它们中的一些在新行中,我可以像在代码中那样控制它们。但我的问题是,一旦我使用
XElement.Parse方法,所有格式都会丢失。