使用分号;在XML中为属性指定多个值

使用分号;在XML中为属性指定多个值,xml,xml-parsing,Xml,Xml Parsing,我不想这样: <person> <forename>Charles</forename> <forename>Theodore</forename> <forename>Maximilian</forename> </person> 查尔斯 西奥多 马西米兰 这样做: <person forename="Charles; Theodore; Maximilian"/

我不想这样:

<person>
    <forename>Charles</forename>
    <forename>Theodore</forename>
    <forename>Maximilian</forename>
</person>

查尔斯
西奥多
马西米兰
这样做:

<person forename="Charles; Theodore; Maximilian"/>

这在第一眼看到时也是经过良好格式化的,不同于例如:

<person forename="Charles; Theo&dore; Maximilian"/>

这会在VisualStudio中引发格式不正确的错误,提示我猜测分号的格式确实正确,并且属性将被正确解析

除此之外,我在其他地方也见过类似的Qt代码:

#include <qdom.h>
#include <qstring.h>


int main(){
  QDomDocument doc;
  QDomElement root = doc.createElement("root");
  doc.appendChild(root);
  QDomElement elem = doc.createElement("test");


  elem.setAttribute("arg", "value1;value2;value3");


 root.appendChild(elem);
  qDebug("%s", doc.toString().ascii());

  return 0;
}
#包括
#包括
int main(){
QDOM文件文档;
QdomeElement root=doc.createElement(“根”);
doc.appendChild(根);
QdomeElement元素=doc.createElement(“测试”);
元素setAttribute(“参数”、“值1;值2;值3”);
根追加子项(elem);
qDebug(“%s”,doc.toString().ascii());
返回0;
}

然而,我对所有的xml解析都不是很有经验,在最流行的(生产环境)xml解析器中属性会被正确解析吗?人的可读性+简短性是atm最重要的目标,但分号在xml中不会引起任何问题。原因是什么

<person forename="Charles; Theo&dore; Maximilian"/>
由于XML中的属性只能有一个值,因此所有规范的XPath实现都将字符串解释为单个值。必须在应用程序级别上以分号分隔字符串;但是您仍然可以请求XPath

//person[contains(@forename, 'Theodore')]

您已经找到了最明显的bug源(编码实体)。是不是一个项目列表的可读性较低?通过减少行数,可以更好地了解分支结构(在必须滚动之前),这就是我的意思/我所追求的。是的(我已经看过w3c xml规范),但是xml解析器(您在工作环境中熟悉的)将如何操作用它的多重属性来解释这个属性;分隔的键值?@DeveloperDoge:作为字符串。必须在应用程序级别拆分分号上的字符串;作为字符串的一部分?@DeveloperDoge:他们会将其作为字符串的一部分,就像空格或
h
或任何其他字符一样。我刚刚尝试了XPath/person[@forename!=“Theodore”]并取回person元素。这意味着元素在XPath眼中没有以Theodore作为值的名字。由于我假设XPath是解析/查询xml数据最常用的工具,因此我认为这给出了我的问题的最终答案,即:“不,大多数流行的xml解析器不会将此属性解析为包含3个值”。你能把你的答案编辑成包含这句话的话吗?这样我就可以直接回答我的问题了。也请包括你最后的评论。
//person[contains(@forename, 'Theodore')]