代码之家  ›  专栏  ›  技术社区  ›  zar

XML元素可以同时具有文本和元素内容吗?

xml
  •  1
  • zar  · 技术社区  · 4 年前

    我有这个XML元素:

    <address>123 main street Chicago IL 60605</address>
    

    现在,假设我想添加 <country> 对于它的元素(我坚持认为国家是一个元素而不是属性),正确的方法是什么?

    我可以这样想象:

    <address>
    <country>USA</country>
    123 main street Chicago IL 60605
    </address>
    

    但是上面的实际地址现在看起来有点无标签,尽管我相信它仍然是一个有效的XML,对吧?

    我之所以问这个问题,是因为我还没有看到任何像上面这样的例子(在学习XML格式方面),其中元素既包含子元素,也包含内联值。

    我知道国家在这里是一个属性会更有意义,但我的问题是关于这种格式。如果这是合法且可接受的,或者在后面的示例中,实际地址应该包含在另一个标签中,例如 <street_address> ?

    1 回复  |  直到 4 年前
        1
  •  1
  •   kjhughes    4 年前

    XML元素可以同时具有文本和元素内容吗?

    是的,它被称为 混合含量 .

    现在,假设我想添加 <country> 对于它的元素(我坚持认为国家是一个元素而不是属性),正确的方法是什么?

    作为XML格式的设计者,这取决于您。

    我可以这样想象:

    <address>
    <country>USA</country>
    123 main street Chicago IL 60605
    </address>
    

    但是上面的实际地址现在看起来有点无标签,尽管我相信它仍然是一个有效的XML,对吧?

    术语澄清: 你想象的是 形状良好 XML。不管是不是 有效的 这取决于你设计或采用的模式。有关区别的更多信息,请参阅 Is there any difference between 'valid xml' and 'well formed xml'?

    如上所述 address 据说元素具有 混合含量 这种形式对于面向文档的设计比面向数据的设计更常见,但XML在任何一种情况下都是格式良好的。如果你正在设计一个模式,你可能想标记地址的其他组件,

    <address>
      <street>123 main street</street>
      <city>Chicago</city>
      <state>IL</state>
      <zip>60605</zip>
    <address>
    

    而不是使用 混合含量 ,如前所述,这对文档很有用:

    <p>This is an example of <i>mixed content</i></p>
    
        2
  •  0
  •   Michael Kay    4 年前

    作为一种设计惯例,最好使用 混合含量 只有在删除标记后文本仍然有意义的地方:

    <p>That is <emph>so</emph> interesting!</p>
    

        <bibref><authors><author format="surname, initials">Kay M. H.</author
    ></authors>: <title>XSLT Programmer's Reference</title
    >. 4th edition, <publisher>Wiley</publisher>, <year>2010</year>.</bibref>
    

    一些XML处理API只有在遵循此约定时才有意义,例如XPath: contains(bibref, "Wiley, 2010") (无论bibref是否已被“标记”,此查询都有效。)

    但是人们可以而且确实以其他方式使用XML混合内容。混合内容当然是XML和JSON之间最大的区别,反映了XML中的M意味着“标记”的事实:它被设计为一个用于标记文本文档部分的系统。