0

XMLファイルを変更したいのですが、注意が必要なのは、追加する情報のフォーマットが最小限である必要があることです。しばらく探していましたが、答えが見つからないようです。XMLが現在(元の)外観は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<doe-jane>
  <name>Jane Doe</name>
  <contact>North Pole

Tel: (555) 123-4567
jane.doe@abc.com
</contact>
  <coveragelist>
    <company>Comp1</company>
    <company>Comp2</company>
  </coveragelist>
</doe-jane>

次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<doe-jane>
  <name>Jane Doe</name>
  <contact>North Pole

Tel: (555) 123-4567
jane.doe@abc.com
</contact>
--> // Change needs to happen from here on <--
<coveragelist><company>Comp1</company>
<company>Comp2</company>
</coveragelist>
</doe-jane>

これまでの私のコードは次のとおりです。

XmlDocument d = new XmlDocument();
//XmlTextWriter wr = new XmlTextWriter(resAnXFile, Encoding.UTF8);
//wr.Formatting = Formatting.None;
d.Load(resAnXFile);
XmlNode t = d.SelectSingleNode("//coveragelist");
t.ParentNode.RemoveChild(t);
// create CoverageList node
XmlNode coverageListNode = d.CreateNode(XmlNodeType.Element, "coveragelist", null);
foreach (var company in dataList)
{
    // create company nodes
    XmlNode companyNode = d.CreateElement("company");
    companyNode.InnerText = company.CompanyName.ToString();
    coverageListNode.AppendChild(companyNode);
}
d.DocumentElement.AppendChild(coverageListNode);
d.Save(resAnXFile);

XMLTextWriterを試しましたが、運がありませんでした。助けてくれて本当に感謝しています。

前もって感謝します。

4

3 に答える 3

1

あなたが何を求めているのか少し混乱していますが、私の理解はこの部分です:

    <company>Comp1</company>
    <company>Comp2</company>

は新しい部分であり、インデントなしで、最初の会社を最初の「coveragelist」ノードと同じ行にしたいですか?

XmlTextWriter を試したとおっしゃっていましたが、次のことを試しましたか。

xmlTextWriter.Formatting = xmlTextWriter.Formatting.None

xmlTextWriter.WriteString("\n");

どこに必要ですか?

于 2012-05-09T20:33:36.857 に答える
1

フォーマットを削除する場合

StringWriter wr = new StringWriter();
XDocument xDoc = XDocument.Load(.....);
xDoc.Save(wr, SaveOptions.DisableFormatting);
var newXml = wr.ToString();
于 2012-05-09T20:34:12.683 に答える
0

ご提案いただきありがとうございます。あなたの助けを借りて、私はこの解決策を思い付くことができました:

// Open up the same file and remove xml auto-formatting
XmlReader reader = XmlReader.Create(readFileName);
XmlTextWriter writer = new XmlTextWriter(writeFileName, null);
while (reader.Read())
{
switch (reader.NodeType)
{
    case XmlNodeType.Element:
        // if 1st node after openening tag is analyst name then setup a linefeed
        if (reader.Name.Equals(Path.GetFileNameWithoutExtension(readerFileName)))
        {
            writer.WriteStartElement(reader.Name);
            writer.WriteString("\r\n");
        }
        else
        {
            // setup linefeed after every element
            writer.WriteStartElement(reader.Name);
            writer.WriteAttributes(reader, true);
            if (reader.IsEmptyElement)
            {
                writer.WriteEndElement();
                writer.WriteString("\r\n");
            }
        }
        break;

    case XmlNodeType.Text:
        writer.WriteString(reader.Value);
        break;

    case XmlNodeType.EndElement:
        writer.WriteEndElement();
        break;

    // handles opening xml tag
    case XmlNodeType.XmlDeclaration:
    case XmlNodeType.ProcessingInstruction:
        writer.WriteProcessingInstruction(reader.Name, reader.Value);
        writer.WriteString("\r\n");
        break;
}
}
// close reader & writer
writer.Flush();
reader.Close();
于 2012-05-28T14:46:43.803 に答える