当前位置: 首页 > 知识库问答 >
问题:

具有公共值的XML SelectNodes(迭代)

贡建修
2023-03-14

我有一个注册选民的XML文档,一个地址可能有多个人。我想迭代地为每个不同的地址(数字和街道)选择节点。然后,我的目标是能够把一个地址的所有居民的名字集合成一行。例如“Robert and Olga BBBBBB”,或“Jennifer eeeee and James FFFF”,或“Desmond AAAAAA”。
我只是需要有关XPath查询的帮助。如果LINQ是答案,我也想听听。你能帮我解决这个问题吗?

<addresses xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <address>
        <LastName>aaaaaa</LastName>
        <FirstName>DESMOND</FirstName>
        <Number>311</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>bbbbbb</LastName>
        <FirstName>OLGA</FirstName>
        <Number>315</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>bbbbbb</LastName>
        <FirstName>ROBERT</FirstName>
        <Number>315</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>cccccc</LastName>
        <FirstName>YUJI</FirstName>
        <Number>316</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>dddddd</LastName>
        <FirstName>MARK</FirstName>
        <Number>319</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>dddddd</LastName>
        <FirstName>HILARY</FirstName>
        <Number>319</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>eeeeee</LastName>
        <FirstName>JENNIFER</FirstName>
        <Number>320</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>ffffff</LastName>
        <FirstName>JAMES</FirstName>
        <Number>320</Number>
        <Street>APPLETON ST</Street>
    </address>
    <address>
        <LastName>gggggg</LastName>
        <FirstName>NORA</FirstName>
        <Number>323</Number>
        <Street>APPLETON ST</Street>
    </address>
</addresses>```

共有1个答案

殳越
2023-03-14

试着跟着。大多数人将使用不是很有效的Xml Serization。在本例中,我更喜欢Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<Address> addresses = doc.Descendants("address").Select(x => new Address()
            {
                lastName = (string)x.Element("LastName"),
                firstName = (string)x.Element("FirstName"),
                number = (int)x.Element("Number"),
                street = (string)x.Element("Street")
            }).ToList();

            var groups = addresses.GroupBy(x => new { number = x.number, street = x.street }).ToList();
        }
    }
    public class Address
    {
        public string lastName { get; set; }
        public string firstName { get; set; }
        public int number { get; set; }
        public string street { get; set; }
    }
}
 类似资料:
  • 我有一个收藏如下 我想知道这张地图上是否有任何条目被设置为同一张地图的另一个条目。 例如,让我们说地图有以下5个条目 因此,它可能有以下重叠项 或者只是一组按键列表,比如 我可以迭代每个键集,然后对每个键集使用disjoint或anyMatch,但我想知道是否有一种优化方法(Java8、9、10、11)。

  • 22.13.8.公共值 表22.14.Java插件-测试属性 任务属性 类型 默认值 testClassesDir File sourceSets.test.output.classesDir classpath FileCollection sourceSets.test.runtimeClasspath testResultsDir File testResultsDir testReport

  • 在私有类中创建一个全局List并具有getter和setter方法会更好,还是只公开它会更好?Java的标准是什么? 我被教导将变量设为私有,只有getter和setter方法,但是访问公共列表肯定比私有列表更好。 这是我的观点,但我当然更喜欢按照标准去做,而不是按照看起来好的去做。

  • 我已经构建了一个AWS CodePipeline来构建容器并将其部署到Fargate托管EC2实例中。参考AWS代码管道 其中一个服务是一个web服务器,我正在尝试从公共访问它,这是可能的,通过一个公共分配的IP地址;但是,这并不是很有用,因为每个部署的容器都会收到一个新的IP地址。

  • 在测试类下面,我想过滤所有部分中的公共语言列表。 例如,测试有药剂列表P1和P2。P1有一个列表 最终输出应该是具有语言Ja和Zh的语言对象列表。

  • 我想在列名称中由模式定义的不同列集上按行计算累积平均值。 示例数据,两组列分别以和开头: 第一组计算在名称以< code>a开头的列中执行: 是和。 是 和 的平均值。 < code>a1_4是< code>a1 、< code>a2 、< code>a3和< code>a4的平均值。 同样,我想对“< code>b列”执行相同的计算:< code>b1_2 、< code>b1_3和< code