如何使用xquery查找节点并向其添加子节点?

2024-05-21

是否可以使用xpath/xquery查询特定的xml节点,然后向其导入/添加子节点?

示例(代码取自http://codepad.org/gJ1Y2LjM http://codepad.org/gJ1Y2LjM,这是在类似的问题中提出的,但不相同):

1. 我想添加一个数组

$book = array('isbn'=>123456789099, 'title' => 'Harry Potter 3', 'author' => 'J K. Rowling', 'edition' => '2007');

2. 到现有的 XML。

$doc = new DOMDocument();
$doc->loadXML('<?xml version="1.0"?>
<books>
    <book>
        <isbn>123456789098</isbn>
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <edition>2005</edition>
    </book>
    <book>
        <placeItHere></placeItHere>
        <isbn>1</isbn>
        <title>stuffs</title>
        <author>DA</author>
        <edition>2014</edition>
    </book>
</books>');

3. 为此,使用以下片段。

$fragment = $doc->createDocumentFragment();
$fragment->appendXML("    <book>
<isbn>{$book['isbn']}</isbn>
        <title>{$book['title']}</title>
        <author>{$book['author']}</author>
        <edition>{$book['edition']}</edition>
    </book>
");

4. 但我没有将其附加到根节点,而是几乎在互联网上找到了每个示例:

$doc->documentElement->appendChild($fragment);

5. 我想将它(p.ex)附加到 /books/book/placeItHere 中找到的节点,而不是使用 getElementbyId 或 tagName,而是使用 xpath/xquery。我尝试过

$xp = new domxpath($doc);
$parent = $xp->query("books/book/placeItHere");

到达该节点,但从未设法将其用作父节点。

问题:如何使用该位置来appendChild $fragment?是否可以?

**YOUR BEAUTIFUL MAGIC**

最后我只会保存它。

echo $doc->saveXML();

感谢您能给我的任何帮助。


有几个问题:

  1. 你的 xpath 表达式应该是/books/book/placeItHere(与领先的/).
  2. DOMXPath::query() http://php.net/manual/en/domxpath.query.php返回一个DOM节点列表 http://php.net/manual/en/class.domnodelist.php而不是一个DOMNode http://php.net/manual/en/class.domnode.php,所以你需要抓住你的item() http://php.net/manual/en/domnodelist.item.php从中。

我很少建议使用文档片段,因为快速而随意地使用原始 XML 经常会导致问题。例如,如果您的书名包含“&”号appendXML()会因解析器错误而崩溃。

相反,我建议createElement() http://php.net/manual/en/domdocument.createelement.php and createTextNode() http://php.net/manual/en/domdocument.createtextnode.php,它将处理诸如& into &amp;自动地。


Example:

$xml = <<<'XML'
<?xml version="1.0"?>
<books>
    <book>
        <isbn>123456789098</isbn>
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <edition>2005</edition>
    </book>
    <book>
        <placeItHere></placeItHere>
        <isbn>1</isbn>
        <title>stuffs</title>
        <author>DA</author>
        <edition>2014</edition>
    </book>
</books>
XML;

$book = [
    'isbn'    => 123456789099,
    'title'   => 'Harry Potter 3',
    'author'  => 'J K. Rowling',
    'edition' => '2007'
];

$dom = new DOMDocument();
$dom->formatOutput = true;
$dom->preserveWhiteSpace = false;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

$placeItHere = $xpath->query('/books/book/placeItHere')->item(0);
$newBook = $placeItHere->appendChild($dom->createElement('book'));
foreach ($book as $part => $value) {
    $element = $newBook->appendChild($dom->createElement($part));
    $element->appendChild($dom->createTextNode($value));
}

echo $dom->saveXML();

Output:

<?xml version="1.0"?>
<books>
  <book>
    <isbn>123456789098</isbn>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <edition>2005</edition>
  </book>
  <book>
    <placeItHere>
      <book>
        <isbn>123456789099</isbn>
        <title>Harry Potter 3</title>
        <author>J K. Rowling</author>
        <edition>2007</edition>
      </book>
    </placeItHere>
    <isbn>1</isbn>
    <title>stuffs</title>
    <author>DA</author>
    <edition>2014</edition>
  </book>
</books>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用xquery查找节点并向其添加子节点? 的相关文章

  • 我需要一个实时网站来测试 Facebook Connect 吗?

    我正在尝试将 facebook connect 与 nmy 社交网站集成 目前用户在我的网站上使用自己的帐户创建和登录 但我希望允许用户基本上在我的网站上创建一个新帐户 但使用 facebook connect 登录 我我认为在我的网站上这
  • Solr 索引在分隔符上分割字段

    我正在尝试使用一些数据设置 Solr 索引 但是我想将我的字段之一作为管道分隔发送并在 Solr 端拆分 例如
  • PHP-将字符串转换为unicode

    我在做这个工作 source mb convert encoding test unicode utf 8 source unpack C source var dump source return array size 8 1 gt in
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • PHP设置全局环境变量的方法

    我已阅读问题 答案here https stackoverflow com questions 13568191 how to get system environment variables into php while running
  • 在 woocommerce 管理订单页面中单击自定义按钮运行函数

    基于 在 woocommerce 中的管理订单列表顶部添加一个按钮 https stackoverflow com questions 49437781 add a button on top of admin orders list in
  • 在 PHP 中重新定义常量

    是否可以在 php 中重新定义由define功能 我有一个包含多个常量的类 其中包含用户数据 我正在尝试为多个用户使用该类 define ALLEGRO ID id define ALLEGRO LOGIN login define ALL
  • PHP—array_merge_recursive() - 相同键没有数组

    php a php gt data1 tag gt div classes gt 1 2 3 php gt data2 tag gt section classes gt 2 3 4 5 6 php gt result array merg
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 使用 OpenSSL 在 PHP 中进行 AES 加密/在 Node.js 中进行解密

    我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密 PHP 使用 OpenSSL 库 Node js 解密基于实现的加密 问题是 Node js 中的解密文本只是部分正确 PHP 加密函数 function encry
  • 如何将 WordPress 类别选择限制为只有一个?

    我有一个自定义帖子类型和一个自定义分类设置 非常标准的东西 但是 我想知道如何限制我的客户在每个帖子中选择多个分类类别 我不介意他们能够创建和删除分类类型 但我不希望他们选择多个分类类型 因为这些是复选框 所以它们可以 也许单选按钮可以工作
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • Paypal IPN 发送“待处理”并以“多币种”为理由?

    我正在使用 Paypal IPN 从我的网站收款 该网站目前仅处于开发阶段 因此我建立了一个沙盒网站进行测试 并且我已经通过在英国注册的测试帐户非常成功地以英镑货币 我的居住国货币 进行付款 但是 我希望该网站能够检测访问者的原籍国并允许他
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m

随机推荐

  • Crashlytics Android Studio 插件无法初始化

    我正在运行 Android Studio 0 5 1 我已经下载了 Crashlytics Android Studio 插件并从光盘安装了它 当我重新启动 Android Studio 时 出现以下异常 Plugin com crashl
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 由于缺少会话而在 Next.js 中使用 Next-Auth 进行重定向时,如何显示 Toast 通知? [复制]

    这个问题在这里已经有答案了 例如 假设我有一个名为internal tsx 的页面 其中包含 export const getServerSideProps GetServerSideProps async ctx gt const ses
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 使用@Transactional(readOnly = true) 有什么优点?

    我是初学者 据我了解 Transactional只需确保类或方法的所有内部工作都用注释 Transactional将被包装在一个事务中 并且来自外部源的所有调用都将创建一个新事务 但是为什么我们实际上需要在下面的存储库中使用这些注释以及使用
  • 口水累积正在更新一个不相关的事实

    在 Drools 中使用累积时 会针对未更新的事实评估并触发规则 规则如下 rule WidgetsPerUser when user User accumulate Widget checkIsUser user widgetCount
  • 开发人员实际上是否使用 vim 在 Windows 操作系统上编写代码(Java)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • jQuery 验证规则和消息 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在设置 jQuery 验证的规则和
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • 如何在 WordPress HTML 中包含“onclick”对象

    我正在尝试将 onclick 对象添加到触发事件的单站点 即而不是多站点 WordPress 中的页面 代码是 a href Send a voice message a 当尝试保存代码时 WordPress 会删除 onclick 对象
  • 列出 JSON 的所有键和值

    假设我有一些如下所示的 JSON items item id 0001 type donut name Cake ppu 0 55 batters batter
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1