【问题标题】:Reading value from one XML to another从一个 XML 读取值到另一个
【发布时间】:2015-04-13 05:43:06
【问题描述】:

我有两个 XML(Queries.xml 和 EnvVar.xml),第一个 xml 包含我的所有 SQL 查询,第二个 xml 包含参数/环境变量等,

在 Queries.xml 中,每个查询都在一个标签内,现在对于查询中的 WHERE 子句,我想从 EnvVar.xml 中读取条件,例如 Select * from table WHERE Year in (2014,2015)... ( 2014,2015)来自EnvVar.xml

Queries.xml 如下:

<Queries> <Sql1> Select * from table Where Year in() </Sql1> </Queries>

EnvVar.xml 如下:

<Parameters><Year>2014,2015</Year></Parameters>

使用下面的 Java 代码,我可以读取 Sql1 中的内容,有没有办法将年份值从 EnvVar 发送到查询?

public static String ReportQuery(String TagValue){
    String HTMLGlobalParameters=null;
    try {           
        URL url = Test.class.getClassLoader().getResource("Queries.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(url.getPath());
        doc.getDocumentElement().normalize();
        NodeList nList = doc.getElementsByTagName("Queries");
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                HTMLGlobalParameters = getTagValue(TagValue, eElement);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return HTMLGlobalParameters;

}

【问题讨论】:

  • 基于什么条件?您希望创建什么输出?
  • 据我了解,您在 xml 文件中创建 sql 查询。而不是解析它,为什么不使用 StringTokenizer ?
  • @MaciejLos:正如我所提到的,我可以使用上面的 java 代码读取 Sql1 标记内的内容,我希望我的最终输出为:Select * from table where year in (2014,2015)跨度>
  • 关于“基于什么条件?”的问题仍然活跃。我没有看到 sql 查询与其参数之间有任何关系...
  • @MaciejLos:如果您指的是“将年份值从 EnvVar 发送到查询”的条件......那么它没有任何条件,对我来说,年份是在其他查询中使用的参数好吧,如果我回答了你的问题,请告诉我

标签: java sql xml xslt xml-parsing


【解决方案1】:

建议你把Queries.xml改成:

<Queries> <Sql1> Select * from table Where Year in(@Year@) </Sql1> </Queries>

那么当你有EnvVar.xml:

<Parameters><Year>2014,2015</Year></Parameters>

您的标签是Year,因此请尝试在Queries.xml 标签值或您的查询字符串中找到'@'+Tag.Name+'@''@Year@',并将其替换为EnvVar.xml 标签值-此处如果2014,2015- .


您的ReportQuery 方法稍加改动即可成为获取EnvVar.xml 文件的标记值的新方法,该文件的名称类似于ReportWhereClues

现在在ReportQuery 中的return HTMLGlobalParameters; 行之前,您可以检查HTMLGlobalParameters 是否有像@...@ 这样的任何部分,并使用 ReportWhereClues 的参数是 @ 之间的字符串,您可以获得类似 2014,2015 的标签值,现在将 @...@ 替换为该标签值。

【讨论】:

  • 对不起,我是 java/xml 的新手,我提到的函数“ReportQuery”读取 Queries.xml 中 Sql1 标记内的内容,请告知您建议的更改。
  • @Vinod 我现在不能给你代码,但我建议你尝试理解解决方案并尝试自己编写代码。下次我会添加代码,我必须去! ;).
猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多