0

私はこのXMLファイルを持っています:

<MyXml>
    <MandatoryElement1>value</MandatoryElement1>
    <MandatoryElement2>value</MandatoryElement2>
    <MandatoryElement3>value</MandatoryElement3>
    <CustomElement1>value</CustomElement1>
    <CustomElement2>value</CustomElement2>
<MyXml>

「MandatoryElementX」と呼ばれる 3 つの要素はすべて、常にファイルに表示されます。「CustomElementX」と呼ばれる要素は不明です。これらはユーザーが自由に追加または削除でき、任意の名前を付けることができます。

必要なのは、MandatoryElements ではないすべての要素を取得することです。したがって、上記のファイルの場合、次の結果が必要です。

<CustomElement1>value</CustomElement1>
<CustomElement2>value</CustomElement2>

カスタム要素の名前が何であるかはわかりません.3つのMandatoryElementsの名前だけなので、クエリはこれらの3つを何らかの形で除外する必要があります.

編集
これは回答済みですが、質問を明確にしたいと思います。実際のファイルは次のとおりです。

<Partner>
    <!--Mandatory elements-->
    <Name>ALU FAT</Name>
    <InterfaceName>Account Lookup</InterfaceName>
    <RequestFolder>C:\Documents and Settings\user1\Desktop\Requests\ALURequests</RequestFolder>
    <ResponseFolder>C:\Documents and Settings\user1\Desktop\Responses</ResponseFolder>
    <ArchiveMessages>Yes</ArchiveMessages>
    <ArchiveFolder>C:\Documents and Settings\user1\Desktop\Archive</ArchiveFolder>
    <Priority>1</Priority>

    <!--Custom elements - these can be anything-->
    <Currency>EUR</Currency>
    <AccountingSystem>HHGKOL</AccountingSystem>
</Partner>

ここでの結果は次のようになります。

<Currency>EUR</Currency>
<AccountingSystem>HHGKOL</AccountingSystem>
4

4 に答える 4

2

You can define a list of mandatory names and use LINQ to XML to filter:

 var mandatoryElements = new List<string>() {
                   "MandatoryElement1", 
                   "MandatoryElement2", 
                   "MandatoryElement3"
                };

 var result = xDoc.Root.Descendants()
                  .Where(x => !mandatoryElements.Contains(x.Name.LocalName));
于 2012-10-11T11:23:46.323 に答える
0

あなたの質問は不適切にフォーマットされたXMLを示していますが、それはタイプミスであり、実際のXmlをXDocumentクラスにロードできると思います。

これを試して...

string xml = @"<MyXml> 
    <MandatoryElement1>value</MandatoryElement1> 
    <MandatoryElement2>value</MandatoryElement2> 
    <MandatoryElement3>value</MandatoryElement3> 
    <CustomElement1>value</CustomElement1> 
    <CustomElement2>value</CustomElement2> 
</MyXml> ";

System.Xml.Linq.XDocument xDoc = XDocument.Parse(xml);
var result = xDoc.Root.Descendants() 
                 .Where(x => !x.Name.LocalName.StartsWith("MandatoryElement")); 
于 2012-10-11T12:14:59.520 に答える
0

TestXMLFile.xml に xml が含まれるとしましょう。

 XElement doc2 = XElement.Load(Server.MapPath("TestXMLFile.xml"));



List<XElement> _list = doc2.Elements().ToList(); 

List<XElement> _list2 = new List<XElement>();

foreach (XElement x in _list)
{
    if (!x.Name.LocalName.StartsWith("Mandatory"))
    {

        _list2.Add(x);
    }
}


foreach (XElement y in _list2)
{
    _list.Remove(y);
}
于 2012-10-11T12:54:27.903 に答える
0

この xml を作成したのですか、それとも別の人またはアプリケーションによって取得されたのですか? あなたの場合は、番号を付けないことをお勧めします。次のようなことができます

<MyXml>     
   <MandatoryElement id="1">value<\MandatoryElement>
   <MandatoryElement id="2">value<\MandatoryElement>     
   <MandatoryElement id="3">value<\MandatoryElement>
   <CustomElement id="1">value<\CustomElement>
   <CustomElement id="2">value<\CustomElement> 
<MyXml> 

LINQ ステートメントでは、リストは必要ありません。

于 2012-10-11T11:36:52.143 に答える