чтение xmlnode с использованием xmlDocment - PullRequest
0 голосов
/ 11 октября 2011

как мне прочитать Id из приведенного ниже примера XML >>> CatalogItem Id="3212" и OrganizationName

string xmlfile = @"C:\Users\easwaranp\Desktop\test.xml";
            ArrayList arrResult = new ArrayList();
            string sContent = File.ReadAllText(xmlfile);
            StringReader DocumentReader = new StringReader(sContent);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(DocumentReader);
            XmlNodeList ReferenceNodes = xmlDoc.GetElementsByTagName("content:Topic");

            foreach (XmlNode Node in ReferenceNodes)
            {                
              string sTopicName = Node.ParentNode.ParentNode.Attributes["OrganizationName"].Value;
            }

            foreach (string s in arrResult)
            {
                Console.WriteLine(s);
            }
            Console.Read();


<content type="application/xml">
    <CatalogItems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="sitename.xsd">
        <CatalogSource Acronym="ABC" OrganizationName="ABC Corporation" />
        <CatalogItem Id="32122" CatalogUrl="urlname">
            <ContentItem xmlns:content="sitename.xsd" Title="Department 1">
                <content:SelectionSpec ClassList="" ElementList="" />
                <content:Language Value="eng" Scheme="ISO 639-2" />
                <content:Source Acronym="ABC" OrganizationName="ABC Corporation1" />
                <content:Topics Scheme="ABC">
                    <content:Topic TopicId="1" TopicName="Marketing1" />
                    <content:Topic TopicId="11" TopicName="Coverage1" />
                </content:Topics>
            </ContentItem>
        </CatalogItem>
    <CatalogItem Id="3212" CatalogUrl="urlname">
        <ContentItem xmlns:content="sitename.xsd" Title="Department 2">
            <content:SelectionSpec ClassList="" ElementList="" />
            <content:Language Value="eng" Scheme="ISO 639-2" />
            <content:Source Acronym="ABC" OrganizationName="ABC Corporation2" />
            <content:Topics Scheme="ABC">
                <content:Topic TopicId="2" TopicName="Marketing2" />
                <content:Topic TopicId="22" TopicName="Coverage2" />
            </content:Topics>
        </ContentItem>
    </CatalogItem>
    <CatalogItem Id="32132" CatalogUrl="urlname">
        <ContentItem xmlns:content="sitename.xsd" Title="Department 3">
            <content:SelectionSpec ClassList="" ElementList="" />
            <content:Language Value="eng" Scheme="ISO 639-2" />
            <content:Source Acronym="ABC" OrganizationName="ABC Corporation3" />
            <content:Topics Scheme="ABC">
                <content:Topic TopicId="3" TopicName="Marketing3" />
                <content:Topic TopicId="33" TopicName="Coverage3" />
            </content:Topics>
        </ContentItem>
    </CatalogItem>
    </CatalogItems>
</content>

Ответы [ 2 ]

0 голосов
/ 12 октября 2011
using System;
using System.IO;
using System.Xml;

class GetValue{
    public static void Main(){
        var xmlDoc = new XmlDocument();
        xmlDoc.Load("test.xml");

        var xmlRoot = xmlDoc.DocumentElement;
        var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
        nsmgr.AddNamespace("content", "sitename.xsd");
        var attr = xmlRoot.SelectSingleNode("descendant::content:Source/@OrganizationName[../../../@Id='3212']", nsmgr);
        if(attr == null)
            Console.WriteLine("not found!");
        else
            Console.WriteLine(attr.Value);
    }
}

ВЫХОД:

ABC Corporation2

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

XPath - ваш друг, когда дело доходит до таких задач.Я адаптировал следующий код из руководства на codeproject.com .Я не знаю, работает ли он (или даже скомпилируется), но он должен помочь вам начать работу в правильном направлении.Кроме того, я предполагаю, что вы говорите о C #, но в случае, если я неправильно понял, какой язык вы используете, не обращайте внимания (языковой тег на ваш вопрос может помочь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...