【发布时间】:2023-04-11 03:23:01
【问题描述】:
我正在尝试对 xml 文档中的某些元素进行操作,而不丢弃文档的其余部分。例如,输入
即如果我有
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<inventory><books>2</books></inventory>
<bookList>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<stock>1</stock>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<stock>0</stock>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<stock>1</stock>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<stock>0</stock>
</book>
</bookList>
</bookstore>
并且只想展示库存书籍(即)
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<inventory><books>2</books></inventory>
<bookList>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<stock>1</stock>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<stock>1</stock>
</book>
</bookList>
</bookstore>
我知道我可以明确地查询文档的其他部分并将它们组合在一起,但这是大量的样板文件,并且对于文档格式的更改很脆弱。有更好的方法吗?
我应该澄清一下,我想保留的 bookList 部分上方的 xml 文件可能还有未知的附加部分。 换句话说,我不想说我是制作一个新的<bookstore> 并包含<inventory>。我宁愿说我想包含源文档中的所有内容,但 <stock> 值为 0 的书籍除外。此外,如果 <bookstore> 元素包含附加信息,即 <bookstore Name="David's Books" schema="www.bookLlist.org"> 等,则同样应保留附加信息.
【问题讨论】:
-
您的示例不是格式良好的 XML。请编辑您的问题。
-
感谢 Ken 和 Mathias,对于这个混乱的问题,我已经更新了问题。你是对的,糟糕的 xml 让我的问题更令人困惑,更没用。感谢您的反馈。
-
顺便说一句,这个问题仍然比它需要的要大得多。如果您不介意,我可能会尝试将其简化为基本要素,以提供如何构建良好 MCVE(最小、完整、可验证的示例)的示例。
-
您可以尝试使用 XSLT。它将允许生成具有特定过滤器/规则的其他 xml w3schools.com/xsl/default.asp w3schools.com/xsl/xsl_if.asp
标签: xml rest xpath xquery basex