удаление пространства имен из xml - PullRequest
0 голосов
/ 11 октября 2011

У меня есть xml как показано:

<?xml version="1.0" encoding="utf-8"?>
<Query_advanced>
<Query>hy</Query>
  <Attribute Name1="Patient's Age" Value1="23" xmlns="xyz"/>
  <Attribute Name1="Patient's Birth Date" Value1="24/12/1988" xmlns="xyz"/>
  <Attribute Name1="Patient's Name" Value1="xyz" xmlns="xyz" />
</Query_advanced>

Мне нужно прочитать xml, чтобы получить значения Name1 и Value1, но я не могу сделать это с xmlns.Есть ли способ, которым я мог бы сделать это?Я пытался использовать:

XmlNamespaceManager xnm = new XmlNamespaceManager(xdoc.NameTable);
xnm.RemoveNamespace("Attribute", "xyz");

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Я думаю, вам не нужно удалять пространство имен, но вы должны добавить его в XmlNameSpaceManager, чтобы использовать префикс (например, @John Saunders comments), например, в выражении XPath.

Попробуйте это:

XmlNamespaceManager xnm = new XmlNamespaceManager(xdoc.NameTable);
xnm.AddNamespace("a", "xyz");

// Cycle through the Attribute nodes
foreach (XmlNode node in xdoc.SelectNodes("//Query_advanced/a:Attribute", xnm)) 
{
    // And read the attributes of the node
    string NameAttribute = node.Attributes["Name1"].Value;
    string ValueAttribute = node.Attributes["Value1"].Value;
}
0 голосов
/ 13 октября 2011

Спасибо за все ваши предложения!Мне удалось сделать это следующим образом:

private void QueryXML () {

        XmlDocument query_xml = new XmlDocument();
        query_xml.Load("Query_1.xml");
        XmlNodeList elements = query_xml.GetElementsByTagName("Attribute");
        string[] s = new string[elements.Count];


        for (int i = 0; i < elements.Count; i++)
        {
            string attrVal = elements[i].Attributes["Value1"].Value;
        Console.Writeline(attrval)

}

Спасибо большое!:)

0 голосов
/ 11 октября 2011

Используйте XmlReader или XmlTextReader, если у вас есть файл.

Вот пример: http://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx

В вашем примере Attribute является тегом xml, а не пространством имен. Name1 и Value1 являются атрибутами xml тега Attribute.

Так что вам нужно прочитать атрибуты тега Attribute.

Пусть xmlString - это xml, который вы хотите проанализировать:

using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
    while(reader.ReadToFollowing("Attribute")){ //loop read Attribute tag
       reader.MoveToFirstAttribute();
       string Name1 = reader.Value; //do something with Name1
       reader.MoveToNextAttribute();
       string Value1 = reader.Value; //do something with Value1
    }
}
...