如何从xml结构中获取后缀值?

时间:2012-10-15 10:35:23

标签: c# xml c#-4.0 xml-parsing xml-serialization

我将xml结构存储在xml字符串中,如abcd变量.test1,test2,test3是xml sructure.how的一部分,以从test1获取后缀值1,2,3,test2,test3

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

4 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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 :(得分:0)

你可以试试这个:

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

这也将删除数字之间的非数字,因此“test1test1x”变为11。

答案 3 :(得分: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