C # CreateElement метод - как добавить дочерний элемент с xmlns = "" - PullRequest
0 голосов
/ 04 мая 2010

Как я могу получить следующий код для добавления элемента с "xmlns = ''"?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strXML = 
                "<myroot>" + 
                "   <group3 xmlns='myGroup3SerializerStyle'>" + 
                "       <firstname xmlns=''>Neal3</firstname>" + 
                "   </group3>" + 
                "</myroot>";

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(strXML);

            XmlElement elem = xmlDoc.CreateElement(null, "lastname", null);
            elem.InnerText = "New-Value";

            string strXPath = "/myroot/*[local-name()='group3' and namespace-uri()='myGroup3SerializerStyle']/firstname";
            XmlNode insertPoint = xmlDoc.SelectSingleNode(strXPath);
            insertPoint.AppendChild(elem);

            string resultOuter = xmlDoc.OuterXml;

            Console.WriteLine("\n resultOuter=" + resultOuter);

            Console.ReadLine(); 

        }
    }
}

Мой текущий выход:

 resultOuter=<myroot><group3 xmlns="myGroup3SerializerStyle"><firstname xmlns=""
>Neal3<lastname>New-Value</lastname></firstname></group3></myroot>

Желаемый вывод:

 resultOuter=<myroot><group3 xmlns="myGroup3SerializerStyle"><firstname xmlns=""
>Neal3<lastname xmlns="">New-Value</lastname></firstname></group3></myroot>

Для справки см. Похожие посты: http://www.stylusstudio.com/ssdn/default.asp?fid=23 (сегодня)

.NET XmlSerializer to Element FormDefault = Неквалифицированный XML? (9 марта, подумал, что я это исправил, но сегодня укусил меня снова!)

1 Ответ

0 голосов
/ 04 мая 2010

Упс - неважно.

Я изменил XPath на это:

string strXPath = "/myroot/*[local-name()='group3' and namespace-uri()='myGroup3SerializerStyle']";

и это сработало. Идея заключалась в том, чтобы добавить фамилию на том же уровне, что и имя, а не имя.

Правильный желаемый результат был действительно таким:

resultOuter=<myroot><group3 xmlns="myGroup3SerializerStyle"><firstname xmlns=""
>Neal3</firstname><lastname xmlns="">New-Value</lastname></group3></myroot>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...