2012-10-15 28 views
0

我存儲xml結構像xml字符串像abcd variable.test1,test2,test3是xml sructure.how的一部分到獲得像test1,test2,test3的1,2,3後綴值如何從xml結構中獲取後綴值?

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>"; 
+0

你打算從test1,test2和test3中獲得值「1」,「2」和「3」? –

+0

@CuongLe是的,我需要1,2,3值 –

回答

0

你可以試試這個:

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

這也將刪除非數字字符其間數字,所以「test1test1x」變爲11

1

我不是很確定你想什麼來實現,但這並不是真正如何使用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> 

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

2

理想情況下,不要像第一個那樣構造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); 
    } 
} 
0

這工作:

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

它返回:

Results

+0

我得到錯誤 –

+0

如果我這樣使用 –

+0

@ user1632157 - 我不得不修復你的xml,因爲它是無效的。 – Enigmativity