2012-08-03 1 views
0

Я хочу получить элемент из XML-файла. Но я не знаю, как получить элемент из XML.Как получить элемент из файла XML

Мой XML-файл:

<?xml version="1.0" standalone="yes" ?> 
<NewDataSet> 
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="resources"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="id" type="xs:string" minOccurs="0" /> 
       <xs:element name="text" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <resources> 
    <id>id_SearchUser</id>   <!--Label lblSearchUser--> 
    <text>Benutzer</text> 
    </resources> 
    <resources> 
    <id>id_location</id>   <!--Label lblLocation--> 
    <text>Werk</text> 
    </resources> 
    <resources> 
    <id>id_Search</id>    <!--Button Button2--> 
    <text>Suchen</text> 
    </resources> 
    <resources> 
    <id>id_User</id>    <!--Label lblUser--> 
    <text>Benutzer</text> 
    </resources> 
    <resources> 
    <id>id_eMail</id>    <!-- Label lblEmail--> 
    <text>eMail</text> 
    </resources> 
    <resources> 
    <id>id_Firstname</id>   <!--LinkLabel lnkFirstname--> 
    <text>Vorname</text> 
    </resources> 
    <resources> 
    <id>id_Lastname</id>   <!--LinkLabel lnkLastname--> 
    <text>Nachname</text> 
    </resources> 
    <resources> 
    <id>id_Telephonnumber</id>  <!--Label lblTelephon--> 
    <text>Telefon</text> 
    </resources> 
</NewDataSet> 

Моя идея:

я получаю местоположение пользователя. Например, «de», и я хочу вызвать метод GetXMLElement, который дает мне контент элемента.

Для примера:

У меня есть ярлык в моем приложении «id_SearchUser», и я хочу, чтобы этот текст изменения свойств на содержание ...

...

<resources> 
    <id>id_SearchUser</id>   
    <text>Benutzer</text> 
</resources> 

....

и текст, чем Benutzer.

Мой метод:

public string GetXMLElement() 
{ 
    XmlDocument xmldoc = new XmlDocument(); 
    xmldoc.Load(Server.MapPath("~/App_Data/de_language.xml")); 
    XmlNode node = // ?? 
    return // node as string 
} 

ответ

5

Как насчет этого?

XDocument document = XDocument.Load(Server.MapPath("~/App_Data/de_language.xml")); 
XElement element = document.Root.Elements("resources").FirstOrDefault(e => e.Element("id").Value == "id_SearchUser"); 
string text; 
if (element != null) 
    text = element.Element("text").Value; 

Обратите внимание, что я использовал XDocument вместо вашего XmlDocument, XDocument использует LINQ, тогда как XmlDocument использует XPATH, чтобы получить узлы. Это вопрос предпочтения.

+0

спасибо, что это работает: P – Tarasov

+0

приветствуется :) – Bazzz

0

Вы хотите использовать XPath для выбора узлов нужно. xpath reference on MSDN - отличный ресурс для этого.

Чтобы найти этот узел, вам необходимо использовать SelectSingleNode method.

+0

Я не хотел бы использовать XPath для этого. Я бы использовал LINQ to XML, который * действительно * прост и не требует встраивания одного языка в другой. –

1

Вы можете использовать XQuery, чтобы получить элемент, который вы хотите:

Вот краткий пример:

XPathDocument doc = new XPathDocument(Server.MapPath("~/App_Data/de_language.xml")); 
var nav = doc.CreateNavigator(); 
var nodes = nav.select("/xpath/to/the/node/you/want/to/select"); // for example /resources/id/text 
nodes.First(); 
// now nodes.Current.Value is the value of the node you've just selected.