3

ルート ノードが複数の名前空間を持つ XML ファイルの解析で問題が発生しています。'UserControlLibrary' を含む文字列型のノード 'object' のリストを取得したい:
XML ファイル:

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net 
http://www.springframework.net/xsd/spring-objects.xsd">

<!-- master pages -->
<object type="RLN.Site, RLN">
    <property name="ContainerBLL" ref="ContainerBLL"></property>
    <property name="UserBLL" ref="UserBLL"></property>
    <property name="TestsBLL" ref="TestsBLL"></property>
<property name="GuidBLL" ref="GuidBLL"></property>
</object>

<object type="RLN.UserControlLibrary.topleveladmin, RLN.UserControlLibrary">
    <property name="ContainerBLL" ref="ContainerBLL"></property>
    <property name="UserBLL" ref="UserBLL"></property>
    <property name="GuidBLL" ref="GuidBLL"></property>
</object>



<object type="RLN.UserControlLibrary.topleveladminfloat, RLN.UserControlLibrary">
    <property name="ContainerBLL" ref="ContainerBLL"></property>
    <property name="UserBLL" ref="UserBLL"></property>
</object>
</objects>

私が試してみました:

  XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml");
  IEnumerable<XElement> values = webXMLResource.Descendants("object");

結果は返されません。

4

4 に答える 4

12

名前空間に関するもう 1 つのトリック - XElement.GetDefaultNamespace()を使用して、ルート要素のデフォルトの名前空間を取得できます。次に、このデフォルトの名前空間をクエリに使用します。

var xdoc = XDocument.Load(path_to_xml);
var ns = xdoc.Root.GetDefaultNamespace();
var objects = xdoc.Descendants(ns + "object");
于 2013-10-02T17:17:23.947 に答える
5

パラメータを指定して呼び出すDecendantsと、(たまたま空だった) が実際にはに加えてに組み込まれます。したがって、次のようにクエリを実行できますXNameXNameNameSpaceNameLocalNameLocalName

p.Descendants().Where(p=>p.Name.LocalName == "object")
于 2013-10-02T17:04:32.237 に答える
0

decedent を使用している場合は、以下のように名前空間を追加する必要があります

 XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml");
 XNamespace _XNamesapce = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
 IEnumerable<XElement> values = from ele in webXMLResource .Descendants(_XNamesapce + "object")
                                select ele;

それがあなたのために働くことを願っています

于 2013-10-03T12:16:30.003 に答える