我有一个允许用户导入电子表格的系统,然后将其制作成XML格式。这个电子表格是动态的。
电子表格的每一行都是XML中的一个元素。
例如,此电子表格为3行:
<DocumentElement>
<Person>
<Title />
<FirstName>Tom</FirstName>
<Surname>Smith</Surname>
<eMail>example@example.com</eMail>
<PostCode>AA11 2BB</PostCode>
<Company></Company>
<TelephoneNumber>01111111111</TelephoneNumber>
<AddressLine1 />
<AddressLine2 />
<AddressLine3 />
</Person>
<Person>
<Title />
<FirstName>Simon</FirstName>
<Surname>Long</Surname>
<eMail>example@example.com</eMail>
<PostCode>AA11 2BB</PostCode>
<Company></Company>
<TelephoneNumber>01111111111</TelephoneNumber>
<AddressLine1 />
<AddressLine2 />
<AddressLine3 />
</Person>
<Person>
<Title />
<FirstName>Paul</FirstName>
<Surname>Boon</Surname>
<eMail>example@example.com</eMail>
<PostCode>AA11 2BB</PostCode>
<Company></Company>
<TelephoneNumber>01111111111</TelephoneNumber>
<AddressLine1 />
<AddressLine2 />
<AddressLine3 />
</Person>
</DocumentElement>
然后将这些行中的每一行变为Person类。但是,我需要知道XMLReader何时移动到XML中的下一个元素,因此我可以为下一行创建一个新类。
所以最后我应该有一个人类: 汤姆史密斯人类班, Simon Long人类和 保罗书人类
那么,我如何判断XML阅读器是否即将移动到下一个元素,以便我可以创建一个新类?
答案 0 :(得分:1)
为什么你直接使用XmlReader
? XmlSerializer
看起来像是工作的正确工具。声明一些类:
[XmlRoot("DocumentElement")]
public class DocumentElement : List<Person>
{
}
public class Person
{
public string Title { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string eMail { get; set; }
public string PostCode { get; set; }
public string Company { get; set; }
public string TelephoneNumber { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressLine3 { get; set; }
}
反序列化您的数据:
var serializer = new XmlSerializer(typeof(DocumentElement));
using (var reader = XmlReader.Create(@"path\to\file.xml"))
{
var doc = (DocumentElement) serializer.Deserialize(reader);
}
有关正常工作的演示,请参阅this fiddle。
答案 1 :(得分:0)
NextSibling是Key; - )
FROM python:2.7
RUN apt-get update && apt-get install -y vim gdal-bin libgdal-dev postgresql-client
# On Jessie, $(gdal-config --version) gives 1.10.1 and Pypi only has 1.10.0
# so we need to strip the last part of the version number
RUN VERSION=$(gdal-config --version); CFLAGS=$(gdal-config --cflags) easy_install GDAL==${VERSION%.*}
RUN mkdir -p /usr/src/app/requirements
COPY requirements /usr/src/app/requirements
WORKDIR /usr/src/app
ARG PIP_TRUSTED_HOST=127.0.0.1
ARG PIP_INDEX_URL=https://pypi.python.org/simple/
RUN pip install --no-cache-dir -r requirements/production.txt
# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY . /usr/src/app
RUN mkdir -p /usr/src/app/log
答案 2 :(得分:0)
这并不是真正回答你的问题,而是选择所有'人'节点的另一种方法。
XmlDocument doc = new XmlDocument();
doc.Load("persons.xml");
XmlNodeList nodes = doc.SelectNodes("//Person");
这将返回文档中任何位置的所有节点,名称为“Person”。
然后,您可以遍历此节点列表并使用该信息来创建类。
它还可以省去浏览文档查找“Person”元素的麻烦。