簡體   English   中英

如何從xml結構中獲取后綴值?

[英]how to get the suffix value from xml structure?

我將xml結構存儲在xmld字符串中,如abcd variable.test1,test2,test3是xml sructure的一部分。如何從test1,test2,test3中獲取后綴值1,2,3

  string abcd="<xmlstruct>
    <test1>
        <name>testname1</name>
        <address>testaddress1</address>
        <subject>testsub1<subject>
    </test1>

    <test2>
        <name>testname2</name>
        <address>testaddress2</address>
        <subject>testsub2<subject>
    </test2>

    <test3>
        <name>testname3</name>
        <address>testaddress3</address>
        <subject>testsub3<subject>
    </test3>


    </xmlstruct>";

理想情況下,首先不要像這樣構造XML。 這不是元素名稱的好用法。 最好使用:

<test id="1">
    ...
</test>

<test id="2">
   ...
</test>

如果這些是您的原始類中具有單獨的變量的結果,則表明這些變量可能應該是單個集合。

如果您確實想找到它們,則可以使用以下方法:

IEnumerable<string> ListSuffixes(XElement container, XName prefix)
{
    string localPrefix = prefix.Name.LocalName;
    var elements = container.Elements()
                            .Where(x => x.Name.Namespace == prefix.Name.Namespace
                                        && x.Name.LocalName
                                                 .StartsWith(localPrefix));
    foreach (var element in elements)
    {
        yield return element.Name.LocalName.Substring(localPrefix.Length);
    }
}

我不確定您要實現的目標,但這並不是通常使用XML的方式。

要從類似於上面的XML中獲取后綴(1、2、3),則可以解析XML,選擇xmlstruct元素的所有子代,然后使用字符串操作。

但是,替代方案可能是一個更好的主意,例如將后綴單獨存儲為屬性

<xmlstruct>
    <test Suffix="1">
        <name>testname1</name>
        <address>testaddress1</address>
        <subject>testsub1<subject>
    </test>
    <test Suffix="2">
        <name>testname2</name>
        <address>testaddress2</address>
        <subject>testsub2<subject>
    </test>
    <test Suffix="3">
        <name>testname3</name>
        <address>testaddress3</address>
        <subject>testsub3<subject>
    </test>
</xmlstruct>

元素名稱不應真正是動態的,給定元素的允許元素名稱列表通常應屬於固定(有限)列表

您可以嘗試以下方法:

Integer.parseInt(s.replaceAll("[\\D]", ""))

這還將刪除數字之間的非數字,因此“ test1test1x”變為11。

這有效:

var suffices =
    XDocument
        .Parse(abcd)
        .Element("xmlstruct")
        .Elements()
        .Where(xe => xe.Name.ToString().StartsWith("test"))
        .Select(xe => int.Parse(xe.Name.ToString().Substring(4)));

它返回:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM