解析中にxml宣言が削除されるのはなぜですか?

Don_B

以下のプログラムを使用して、あるxmlファイルから別のノード値を変更しようとしています。このプログラムは、abcというフォルダー内のxmlファイルから最初のノードpub-titleから値を取得し、その値を最初のノードパブリッシャーに貼り付けます-名前という名前のフォルダ内の別のXMLファイルにXYZ

注:escape_stringメソッドは、UTF-8エンティティ値を変更せず、そのまま維持するように実装されています。

var job_folders = Directory.EnumerateDirectories(textBox1.Text, "*", SearchOption.TopDirectoryOnly);
foreach (string job_folder in job_folders)
{
    var target_xml_file = Directory.GetFiles(job_folder, "*.xml", SearchOption.AllDirectories).Where(a => Path.GetFileName(Path.GetDirectoryName(x)).ToLower() == "abc").First();
    var target_meta_file = Directory.GetFiles(job_folder, "*.xml", SearchOption.AllDirectories).Where(a => Path.GetFileName(Path.GetDirectoryName(x)).ToLower() == "xyz").First();

    string path = Path.GetFullPath(target_meta_file);
    string file_content = escape_string(File.ReadAllText(path), 0);
    XDocument doc = XDocument.Parse(file_content, LoadOptions.PreserveWhitespace);
    var lbl=doc.Descendants("pub-title").First().Value;
    XDocument doc2 = XDocument.Parse(escape_string(File.ReadAllText(target_xml_file), 0), LoadOptions.PreserveWhitespace);
    doc2.DocumentType.InternalSubset = null;
    doc2.Descendants("publisher-name").First().Value=lbl;
    doc2.Save(target_xml_file);
    File.WriteAllText(target_xml_file, escape_string(doc2.ToString(), 1));
}

MessageBox.Show("Complete");

private static string escape_string(string input_string, int option)
{
    switch (option)
    {
        case 0:
            return input_string.Replace("&", "&").ToString();
        case 1:
            return input_string.Replace("&", "&").ToString();
        default:
            return null;
    }
}

すべてうまくいき<?xml version="1.0" encoding="utf-8"?>ますが、target_xml_fileのファイルから削除されています

これを修正するにはどうすればよいですか?変更前のファイル

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="jats-html.xsl"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD with OASIS Tables v1.0 20120330//EN" "JATS-journalpublishing-oasis-article1.dtd"[]>
<article article-type="proceedings" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://www.niso.org/standards/z39-96/ns/oasis-exchange/table">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id" />
<journal-title-group>
<journal-title>Eleventh &#x0026; Tenth International Conference on Correlation Optics</journal-title>
</journal-title-group>
<issn pub-type="epub">0277-786X</issn>
<publisher>
<publisher-name>SPIE</publisher-name>
</publisher>
</journal-meta>
....
....

後にファイル

<?xml-stylesheet type="text/xsl" href="jats-html.xsl"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD with OASIS Tables v1.0 20120330//EN" "JATS-journalpublishing-oasis-article1.dtd">
<article article-type="proceedings" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://www.niso.org/standards/z39-96/ns/oasis-exchange/table">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id" />
<journal-title-group>
<journal-title>Eleventh &#x0026; Tenth International Conference on Correlation Optics</journal-title>
</journal-title-group>
<issn pub-type="epub">0277-786X</issn>
<publisher>
<publisher-name>a</publisher-name>
</publisher>
</journal-meta>
アンドリー・リトビノフ

XDocument.ToString()への回答に続いてXMLエンコーディングタグ削除します。ToStringメソッドは使用しないでください。StringWriter代わりに次を使用してください。

using (var stream = new MemoryStream())
{
    using (var writer = new XmlTextWriter(stream, Encoding.UTF8))
    {
        doc2.Save(writer);
    }
    string xml = escape_string(Encoding.UTF8.GetString(stream.ToArray()), 1);
    File.WriteAllBytes(target_xml_file, Encoding.UTF8.GetBytes(xml));
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#6で宣言式が削除されるのはなぜですか?

分類Dev

ElementTree:名前空間の宣言が削除されるのはなぜですか?

分類Dev

宣言されているが使用されていない変数を削除すると、プログラムが早期に終了するのはなぜですか?

分類Dev

Java定数が静的に宣言されているのはなぜですか?

分類Dev

関数宣言が2行に折り返されるのはなぜですか?

分類Dev

関数宣言で前方宣言が許可されるのはなぜですか?

分類Dev

値0が解析されないのに、他の数値が解析されるのはなぜですか?

分類Dev

ReSharperが関数が宣言される前に使用されていると警告するのはなぜですか?

分類Dev

移動操作が宣言されているときにコピー操作が削除されるのはなぜですか?

分類Dev

なぜ静的が通常の宣言ではなく使用されるのですか?

分類Dev

データで宣言されていないのに、この値が反応するのはなぜですか?

分類Dev

/ dev / shm /の内容が自動的に削除されるのはなぜですか

分類Dev

/ dev / shm /の内容が自動的に削除されるのはなぜですか

分類Dev

宣言されていない変数が存在するのはなぜですか?

分類Dev

分割中にIFS値がファイルから削除されるのはなぜですか?

分類Dev

自動宣言された変数にシンすることができないのはなぜですか?

分類Dev

すでに宣言しているのに、配列が宣言されていないことをPerlが教えてくれるのはなぜですか?

分類Dev

参照型のメンバーが暗黙的に宣言されたコピー代入演算子を削除するのはなぜですか

分類Dev

このXMLの例に「<」、「>」、「」、「」が表示されているのはなぜですか?

分類Dev

GADBannerViewが宣言されていないのはなぜですか?

分類Dev

「EINTR」が宣言されていないのはなぜですか?

分類Dev

変数値が削除されるのはなぜですか?

分類Dev

関数宣言でconstが許可されているのはなぜですか?

分類Dev

ComponentWillMount Undefinedで変数が宣言されているのはなぜですか?

分類Dev

MutableLiveData変数が等号(=)で宣言されているのはなぜですか?

分類Dev

列挙型データ型が常にcのmain()から宣言されているのはなぜですか?

分類Dev

このxml解析で要素が1つだけ生成されるのはなぜですか?

分類Dev

次の例でライフタイムが明示的に宣言されているのはなぜですか?

分類Dev

InputStream.close()がIOExceptionをスローするように宣言されているのはなぜですか?

Related 関連記事

  1. 1

    C#6で宣言式が削除されるのはなぜですか?

  2. 2

    ElementTree:名前空間の宣言が削除されるのはなぜですか?

  3. 3

    宣言されているが使用されていない変数を削除すると、プログラムが早期に終了するのはなぜですか?

  4. 4

    Java定数が静的に宣言されているのはなぜですか?

  5. 5

    関数宣言が2行に折り返されるのはなぜですか?

  6. 6

    関数宣言で前方宣言が許可されるのはなぜですか?

  7. 7

    値0が解析されないのに、他の数値が解析されるのはなぜですか?

  8. 8

    ReSharperが関数が宣言される前に使用されていると警告するのはなぜですか?

  9. 9

    移動操作が宣言されているときにコピー操作が削除されるのはなぜですか?

  10. 10

    なぜ静的が通常の宣言ではなく使用されるのですか?

  11. 11

    データで宣言されていないのに、この値が反応するのはなぜですか?

  12. 12

    / dev / shm /の内容が自動的に削除されるのはなぜですか

  13. 13

    / dev / shm /の内容が自動的に削除されるのはなぜですか

  14. 14

    宣言されていない変数が存在するのはなぜですか?

  15. 15

    分割中にIFS値がファイルから削除されるのはなぜですか?

  16. 16

    自動宣言された変数にシンすることができないのはなぜですか?

  17. 17

    すでに宣言しているのに、配列が宣言されていないことをPerlが教えてくれるのはなぜですか?

  18. 18

    参照型のメンバーが暗黙的に宣言されたコピー代入演算子を削除するのはなぜですか

  19. 19

    このXMLの例に「<」、「>」、「」、「」が表示されているのはなぜですか?

  20. 20

    GADBannerViewが宣言されていないのはなぜですか?

  21. 21

    「EINTR」が宣言されていないのはなぜですか?

  22. 22

    変数値が削除されるのはなぜですか?

  23. 23

    関数宣言でconstが許可されているのはなぜですか?

  24. 24

    ComponentWillMount Undefinedで変数が宣言されているのはなぜですか?

  25. 25

    MutableLiveData変数が等号(=)で宣言されているのはなぜですか?

  26. 26

    列挙型データ型が常にcのmain()から宣言されているのはなぜですか?

  27. 27

    このxml解析で要素が1つだけ生成されるのはなぜですか?

  28. 28

    次の例でライフタイムが明示的に宣言されているのはなぜですか?

  29. 29

    InputStream.close()がIOExceptionをスローするように宣言されているのはなぜですか?

ホットタグ

アーカイブ