使用标签格式化XElement

数据库

我有一个现有的xml文档:

<?xml version="1.0" encoding="utf-16"?>
<property_set_list>
    <property_set symbol_id="TestPropertySet1">
        <property symbol_id="TestName1" id="1" type="8">Test</property>
        <property symbol_id="TestName2" id="2" type="8"></property>
    </property_set>
    <property_set symbol_id="TestPropertySet2">

    </property_set>
</property_set_list>

我加载它并更新并添加一些属性。例如:

TestName1属性已更新。TestName 2属性保持不变。

在TestPropertySet2中,我添加了一些新属性。

经过所有操作后,文档的输出如下:

<?xml version="1.0" encoding="utf-16"?>
<property_set_list>
    <property_set symbol_id="TestPropertySet1">
        <property symbol_id="TestName1" id="1" type="8">qwerty</property>
        <property symbol_id="TestName2" id="1" type="8">
        </property>
    </property_set>
    <property_set symbol_id="TestPropertySet2">
        <property symbol_id="localeID" id="1" type="19">1033</property>
        <property symbol_id="localeID" id="2" type="19">1079</property>
    </property_set>
</property_set_list>

这是我用于加载和处理文档的代码:

using (var reader = ReaderCreator())
            using (var output = OutputCreator())
            using (var xmlWriter = new XmlTextWriter(output))
            {
                xmlWriter.Indentation = 1;
                xmlWriter.Formatting = Formatting.Indented;
                xmlWriter.IndentChar = TAB;

                XDoc = XElement.Load(reader, LoadOptions.None);
                Namespace = "some namespace";

               // some code to update properties


                // adds new nodes to TestPropertySet2
                foreach (var localeId in _franchise.LocaleIds)
                {
                    TestPropertySet2.Add(
                        new XElement(
                            Namespace + "property", localeId,
                            new XAttribute("symbol_id", "localeID"),
                            new XAttribute("id", i),
                            new XAttribute("type", "19")
                        )
                    );
                    i++;
                }

                XDoc.Save(xmlWriter);
            }

问题是TestName2属性现在位于两行中:

<property symbol_id="TestName2" id="1" type="8">
            </property>
安德烈五世

我不知道您ReaderCreator()OutputCreator()方法的用途。但是下面的代码可以按我的要求工作。

string xml = "<property_set_list><property_set symbol_id=\"TestPropertySet1\"><property symbol_id=\"TestName1\" id=\"1\" type=\"8\">qwerty</property>" +
    "<property symbol_id=\"TestName2\" id=\"1\" type=\"8\"></property></property_set><property_set symbol_id=\"TestPropertySet2\">" +
    "<property symbol_id=\"localeID\" id=\"1\" type=\"19\">1033</property><property symbol_id=\"localeID\" id=\"2\" type=\"19\">1079</property></property_set></property_set_list>";

XElement xdoc = XElement.Parse(xml);
XElement TestPropertySet2 = xdoc.Elements()
    .Where(x => x.Attribute("symbol_id").Value == "TestPropertySet2")
    .FirstOrDefault();

TestPropertySet2.Add(
    new XElement(
       "property", "locale_id_val",
       new XAttribute("symbol_id", "localeID"),
       new XAttribute("id", "99"),
       new XAttribute("type", "19")
       ));

XmlWriterSettings xws = new XmlWriterSettings();
xws.Indent = true;
xws.IndentChars = "\t\t";

FileStream fs = new FileStream("test.xml", FileMode.Create);
using (XmlWriter xw = XmlWriter.Create(fs, xws))
{
     xdoc.Save(xw);
}
fs.Close();

这将产生以下输出(保留缩进):

<property_set_list>
    <property_set symbol_id="TestPropertySet1">
            <property symbol_id="TestName1" id="1" type="8">qwerty</property>
            <property symbol_id="TestName2" id="1" type="8"></property>
    </property_set>
    <property_set symbol_id="TestPropertySet2">
            <property symbol_id="localeID" id="1" type="19">1033</property>
            <property symbol_id="localeID" id="2" type="19">1079</property>
            <property symbol_id="localeID" id="99" type="19">locale_id_val</property>
    </property_set>

请不要使用XmlWriter代替XmlTextWriter我不知道这是否是您遇到问题的原因。此代码可以轻松地适应您的特定实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用标签格式化XElement

来自分类Dev

使用Struts2标签格式化数字

来自分类Dev

使用VBA格式化Excel图表中的数据标签

来自分类Dev

使用Vetur更好地格式化HTML标签?

来自分类Dev

使用Struts2标签格式化数字

来自分类Dev

使用VBA格式化Excel图表中的数据标签

来自分类Dev

使用for循环声明和格式化表单的多个标签

来自分类Dev

格式化Highcharts y轴标签

来自分类Dev

Matplotlib格式化刻度标签

来自分类Dev

Highcharts格式化数据标签

来自分类Dev

rCharts格式化轴标签:outputFormat

来自分类Dev

表->标签中的格式化程序

来自分类Dev

在XYPlot上格式化点标签

来自分类Dev

格式化轴刻度标签

来自分类Dev

MS Access - 格式化标签

来自分类Dev

如何强制使用更漂亮的 html 格式来格式化一行中的标签?

来自分类Dev

使用循环格式化

来自分类Dev

在matplotlib中使用SymLogNorm归一化格式化颜色条刻度标签

来自分类Dev

Angular - 使用 regex 和 css 使用 ngIf 和 ngFor 条件格式化标签

来自分类Dev

如何捕获和格式化输出嵌套格式标签?

来自分类Dev

如何在ggplot中使用对数刻度格式化标签

来自分类Dev

使用<pre>标签在HTML电子邮件中格式化QR码

来自分类Dev

使用aes_string时,格式化geom_text标签不起作用

来自分类Dev

使用Angular-Chartist和CoffeeScript格式化Chartist标签

来自分类Dev

如何使用ul和li标签格式化中继器控件

来自分类Dev

无法使用CSS格式化html表单元素(标签和输入)

来自分类Dev

在Bokeh中使用适当的上标格式化日志轴标签

来自分类Dev

如何使用格式化程序将ObjectBinding <BigDecimal>绑定到标签?

来自分类Dev

如何使用xml.etree.ElementTree Python格式化属性,前缀和标签

Related 相关文章

热门标签

归档