0

我将 xml 结构存储在 xml 字符串中,例如 abcd variable.test1,test2,test3 是 xml 结构的一部分。如何从 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>";
4

4 回答 4

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);
    }
}
于 2012-10-15T10:40:22.940 回答
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>

元素名称实际上不应该是动态的,给定元素的允许元素名称列表通常应该属于固定(有限)列表

于 2012-10-15T10:39:42.503 回答
0

你可以试试这个:

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

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

于 2012-10-15T10:39:04.243 回答
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)));

它返回:

结果

于 2012-10-15T10:40:48.120 回答