gpt4 book ai didi

java - Java中如何使用节点属性值读取、更新和删除现有的XML文件

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:18 24 4
gpt4 key购买 nike

我正在尝试根据找到的值读取/更新/删除 XML 文件。

我有一个名为 123456.xm l 的 XML,格式如下。

<ps>
<p n="359" u="/ae/arabic/plan_book/plan_and_book.aspx"/>
<p n="277" u="/ae/english/plan_book/plan_and_book.aspx"/>
<p n="410" u="/ao/english/plan_book/plan_and_book.aspx"/>
</ps>

现在我在 java 中的新方法将获取文件路径 ( c://java/Files/12345.xml )、n(277 - 将在文件中检查的值) 和 U ("/de/english/plan_book/plan_and_book.aspx")。

我的java方法的逻辑如下,但是真的不知道怎么写。

添加/附加方法逻辑:

  1. 打开文件 c://java/Files/12345.xml
  2. 搜索所有节点并找到 n(277) 值的基础。 277只会有一条记录
  3. 如果文件中存在此值,则不需要更新,否则在 xml 文件中添加新节点,例如,如果 n 的值本来是 (777),因为文件中不存在此属性记录,那么它会在文件 (<p n="777" u="/ao/english/plan_book/plan_and_book.aspx"/>) 中添加一条新记录。
  4. 将更新后的 XML 保存在同一位置。

删除方法逻辑:

  1. 打开文件 c://java/Files/12345.xml
  2. 搜索所有节点并根据 n(277) 的值进行查找。 277 只有一条记录。
  3. 如果该值存在于节点属性“n”中,那么它将从 xml 中删除该节点,否则不需要更新。
  4. 将更新后的 XML 保存在同一位置。

如果您分享上述实现的一些好的示例或链接,我们将不胜感激。

谢谢。

最佳答案

在 XSLT 中指定这种处理通常比在命令式语言中更容易和简单(不需要 regEx)

可以直接使用下面的 XSLT 转换,或者它可以给出如何用另一种语言实现相同算法的想法:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:param name="pAction" select="'delete'"/>
<xsl:param name="pN" select="277"/>
<xsl:param name="pU" select="'/de/english/plan_book/plan_and_book.aspx'"/>

<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="ps">
<ps>
<xsl:apply-templates select=
"*[not($pAction = 'delete')]
|
*[$pAction = 'delete' and not(@n = $pN)]
"/>
<xsl:if test="$pAction = 'add' and not(p[@n = $pN])">
<p n="{$pN}" u="{$pU}"/>
</xsl:if>
</ps>
</xsl:template>

<xsl:template match="p">
<xsl:choose>
<xsl:when test="not(@n = $pN)">
<xsl:call-template name="identity"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="not($pAction = 'delete')">
<xsl:call-template name="identity"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<ps>
<p n="359" u="/ae/arabic/plan_book/plan_and_book.aspx"/>
<p n="277" u="/ae/english/plan_book/plan_and_book.aspx"/>
<p n="410" u="/ao/english/plan_book/plan_and_book.aspx"/>
</ps>

产生了想要的、正确的结果:

<ps>
<p n="359" u="/ae/arabic/plan_book/plan_and_book.aspx"/>
<p n="410" u="/ao/english/plan_book/plan_and_book.aspx"/>
</ps>

当参数$pAction更改为时:

 <xsl:param name="pAction" select="''add'"/>

然后转换的结果是相同的 XML 文档(未更改)。

当参数为时:

 <xsl:param name="pAction" select="''add'"/>

XML 文档是:

<ps>
<p n="359" u="/ae/arabic/plan_book/plan_and_book.aspx"/>
<p n="410" u="/ao/english/plan_book/plan_and_book.aspx"/>
</ps>

那么结果是:

<ps>
<p n="359" u="/ae/arabic/plan_book/plan_and_book.aspx"/>
<p n="410" u="/ao/english/plan_book/plan_and_book.aspx"/>
<p n="277" u="/de/english/plan_book/plan_and_book.aspx"/>
</ps>

关于java - Java中如何使用节点属性值读取、更新和删除现有的XML文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10785743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com