gpt4 book ai didi

xml - 使用 Ant 解析 XML 文档中的字符串

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

在以下文档中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="toc">section</string>
<string name="id">id17</string>
</resources>

如何返回值:id17

当我在 Ant 文件中运行以下目标时:

  <target name="print"
description="print the contents of the config.xml file in various ways" >

<xmlproperty file="$config.xml" prefix="build"/>
<echo message="name = ${build.resources.string}"/>
</target>

我明白了-

print:
[echo] name = section,id17

有没有办法指定我只想要资源“id”?

最佳答案

我有一个好消息和一个坏消息要告诉你。一个坏消息是没有开箱即用的解决方案。好消息是 xmlproperty 任务是相当可扩展的,感谢将 processNode() 方法公开为 protected 。您可以执行以下操作:

1.使用 ant.jar(您可以在 ant 发行版的 lib 子目录或 get it from Maven 中找到一个)在类路径上创建并编译以下代码:

package pl.sobczyk.piotr;

import org.apache.tools.ant.taskdefs.XmlProperty;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

public class MyXmlProp extends XmlProperty{

@Override
public Object processNode(Node node, String prefix, Object container) {
if(node.hasAttributes()){
NamedNodeMap nodeAttributes = node.getAttributes();
Node nameNode = nodeAttributes.getNamedItem("name");
if(nameNode != null){
String name = nameNode.getNodeValue();

String value = node.getTextContent();
if(!value.trim().isEmpty()){
String propName = prefix + "[" + name + "]";
getProject().setProperty(propName, value);
}
}
}

return super.processNode(node, prefix, container);
}

}

2。现在你只需要让这个任务对 Ant 可见。最简单的方法:在你有 ant 脚本的目录中创建 task 子目录 -> 将编译后的 MyXmlProp 类及其目录结构复制到 task 目录,这样你应该得到类似的东西: task/pl/sobczyk/peter/MyXmlProp.class.

3。将任务导入到您的 ant 脚本中,您应该得到如下内容:

<target name="print">
<taskdef name="myxmlproperty" classname="pl.sobczyk.piotr.MyXmlProp">
<classpath>
<pathelement location="task"/>
</classpath>
</taskdef>
<myxmlproperty file="config.xml" prefix="build"/>
<echo message="name = ${build.resources.string[id]}"/>
</target>

4.运行 ant,ant 瞧,你应该看到:[echo] name = id17

我们在这里所做的是为您的特定情况定义一个特殊的花式方括号语法 :-)。对于一些更通用的解决方案,任务扩展可能会稍微复杂一些,但一切皆有可能:)。祝你好运。

关于xml - 使用 Ant 解析 XML 文档中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486399/

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