如何使用C#基于值在XML中添加子孙? [英] How do I add child and grandchild in XML based on value using C#?

查看:73
本文介绍了如何使用C#基于值在XML中添加子孙?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的XML有这样的数据:



MY XML has data like this:

<?xml version="1.0" encoding="UTF-8"?>
    <html xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ev="http://www.w3.org/2001/xml-events" xml:lang="de">
    <head>
    <title>Some Title</title>
    <link rel="stylesheet" type="text/css" href="../Styles/9783748258957.css"/>
    </head>
    <body>
    <div id="Inhalt">
    <p class="toc-ch"><span class="bi">4 Main Value</span></p>
    <p class="toc-h1">4.1 Child Value 1</p>
    <p class="toc-h1">4.2 Child Value 2</p>
    <p class="toc-h1">4.3 Child Value 3</p>
    <p class="toc-h2">4.3.1 Grand-child Value 3.1</p>
    <p class="toc-h2">4.3.2 Grand-child Value 3.2</p>
    <p class="toc-h2">4.3.3 Grand-child Value 3.3</p>
    <p class="toc-h2">4.3.4 Grand-child Value 3.4</p>
    <p class="toc-h1">4.4 Child Value 4</p>
    <p class="toc-h2">4.4.1 Grand-child Value 4.1</p>
    <p class="toc-h2">4.4.2 Grand-child Value 4.2</p>
    <p class="toc-h2">4.4.3 Grand-child Value 4.3</p>
    <p class="toc-h2">4.4.4 Grand-child Value 4.4</p>
    <p class="toc-h1">4.5 Child Value 5</p>
    </div>
    </body>
    </html>





这就是我想要的:





This is what I want:

<?xml version="1.0" encoding="UTF-8"?>
    <html xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ev="http://www.w3.org/2001/xml-events" xml:lang="de">
    <head>
    <title>Some Title</title>
    <link rel="stylesheet" type="text/css" href="../Styles/9783748258957.css"/>
    </head>
    <navMap>
    <navPoint id="navPoint-01" playOrder="01"><navLabel><text>4 Main Value</text></navLabel>
    <navPoint id="navPoint-02" playOrder="02"><navLabel><text>4.1 Child Value 1</text></navLabel></navPoint>
    <navPoint id="navPoint-03" playOrder="03"><navLabel><text>4.2 Child Value 2</text></navLabel></navPoint>
    <navPoint id="navPoint-04" playOrder="04"><navLabel><text>4.3 Child Value 3</text></navLabel>
    <navPoint id="navPoint-05" playOrder="05"><navLabel><text>4.3.1 Grand-child Value 3.1</text></navLabel></navPoint>
    <navPoint id="navPoint-06" playOrder="06"><navLabel><text>4.3.2 Grand-child Value 3.2</text></navLabel></navPoint>
    <navPoint id="navPoint-07" playOrder="07"><navLabel><text>4.3.3 Grand-child Value 3.3</text></navLabel></navPoint>
    <navPoint id="navPoint-08" playOrder="08"><navLabel><text>4.3.4 Grand-child Value 3.4</text></navLabel></navPoint></navPoint>
    <navPoint id="navPoint-09" playOrder="09"><navLabel><text>4.4 Child Value 4</text></navLabel>
    <navPoint id="navPoint-10" playOrder="10"><navLabel><text>4.4.1 Grand-child Value 4.1</text></navLabel></navPoint>
    <navPoint id="navPoint-11" playOrder="11"><navLabel><text>4.4.2 Grand-child Value 4.2</text></navLabel></navPoint>
    <navPoint id="navPoint-12" playOrder="12"><navLabel><text>4.4.3 Grand-child Value 4.3</text></navLabel></navPoint>
    <navPoint id="navPoint-13" playOrder="13"><navLabel><text>4.4.4 Grand-child Value 4.4</text></navLabel></navPoint></navPoint>
    <navPoint id="navPoint-14" playOrder="14"><navLabel><text>4.5 Child Value 5</text></navLabel></navPoint></navPoint>
    </navMap>
    </html>





我所尝试的并不是创造一个孩子或孙子。所有元素都是分开的,但如果你看到我想要的输出,它会显示孩子和孙子。请帮助我实现它。



我尝试过:



这就是我的尝试:





What I have tried does not create a child or grandchild. All elements are separate, but if you see my desired output, it shows child and grandchild. Please help me achieve it.

What I have tried:

This is what I have tried:

var navPoint = new XElement(ePUBv3TOCNamespace + "navPoint"
    , new XAttribute("id", "navPoint-" + navPointcounter)
    , new XAttribute("playOrder", playOrder)
    , new XElement(ePUBv3TOCNamespace + "navLabel"
    , new XElement(ePUBv3TOCNamespace + "text", fileWithoutExtension)));
    var navContent = new XElement(ePUBv3TOCNamespace + "content", new XAttribute("src", "Text/" + fullFileName));
    xtabdoc.Root.Element(ePUBv3TOCNamespace + "navMap").Add(navPoint);
    navPoint.Add(navContent);
    navPointcounter++;
    playOrder++;

推荐答案

将子项添加到将成为父项的节点。首先获取代码中的元素并确认你是否正确,在进行调试时进行调试
You add the child to the node that will be it's parent. Get the element in your code first and confirm you got the right one, for debugging, as you work on it


这篇关于如何使用C#基于值在XML中添加子孙?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆