Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用.replace()替换使用XPATH java提取的XML依赖项_Java_Xpath_Replace_Xml Parsing_Contains - Fatal编程技术网

尝试使用.replace()替换使用XPATH java提取的XML依赖项

尝试使用.replace()替换使用XPATH java提取的XML依赖项,java,xpath,replace,xml-parsing,contains,Java,Xpath,Replace,Xml Parsing,Contains,我有一个pom xml和pom web xml。 我试图通过使用Xpath将依赖项提取到一个变量中,并尝试执行。将pom.xml文件中的替换为变量,将依赖项从pom web复制到pom.xml。但是如果.contains()的条件为false,我无法通过变量替换内容。下面的任何帮助都是我使用的代码 pom.xml <project> <dependencies> <dependency> <groupId&

我有一个pom xml和pom web xml。 我试图通过使用Xpath将依赖项提取到一个变量中,并尝试执行。将pom.xml文件中的替换为变量,将依赖项从pom web复制到pom.xml。但是如果.contains()的条件为false,我无法通过变量替换内容。下面的任何帮助都是我使用的代码

pom.xml

<project>
    <dependencies>
        <dependency>
            <groupId>com.test.tm</groupId>
            <artifactId>gameJdk</artifactId>
            <version>1.0.0.1</version>
        </dependency>
        <!-- For Compress JS -->
        <dependency>
            <groupId>com.yahoo.platform.yui</groupId>
            <artifactId>yuicompressor</artifactId>
            <version>2.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>EccpressoFIPSJca</artifactId>
            <version>7.0</version>
        </dependency>

        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>EccpressoFIPS</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.12.0</version>
        </dependency>
    </dependencies>
</project>
我建议您使用它,它可以轻松解析xml,而不是重新发明轮子

将每个xml文件读入内存,从一个xml复制依赖项节点,并用另一个xml替换它们

以下是一个工作示例:

package replacexmlnode;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;


public class ReplaceXmlNode {
    
  public static void main(String[] args) throws IOException {
    
    String pom = readFile(ReplaceNode.class.getResourceAsStream("pom-plain.xml"));
    String web = readFile(ReplaceNode.class.getResourceAsStream("pom-web.xml"));
    
    Document doc_web = Jsoup.parse(web,"",Parser.xmlParser());
    Document doc_pom = Jsoup.parse(pom,"",Parser.xmlParser());
    
    Elements dependencies_web = doc_web.select("project>dependencies");

    //remove old dependencies        
    doc_pom.select("project>dependencies").remove();

    // add new dependencies
    doc_pom.select("project").first().appendChild(dependencies_web.first());       
    
    doc_pom.outputSettings().prettyPrint(false);
    Files.write(Paths.get("pom-plain_out.xml"), doc_pom.toString().getBytes());
 }

  public static String readFile(InputStream in) throws IOException{
   
    return new String(in.readAllBytes(), StandardCharsets.UTF_8);
 }
}

如果您使用maven get Jsoup Dependency from

@firephil,我已经按照您的要求更新了代码…我不确定上面的问题是否回答了我的问题,我正在尝试使用contains和替换现有节点。替换为预期结果中列出的文件中的新节点可能需要更多导入,但您应该需要当鼠标悬停在其上时,能够快速修复不尝试处理词法(序列化)带正则表达式的XML:进行XSLT转换。@Michael Kay你能提供上述问题的代码答案吗?我感觉你在试图摆脱原来的问题。我已经为这个问题困扰了一周。我很想今天就把它整理好。请帮我实现预期的结果。当你得到这个问题时,请帮我完成这项DDoS工作元素按标记排列,它使用不需要的depencies标记…这就是为什么我使用xpath在项目级别下获取特定depencies标记…在上面的代码中,它使用xml中的所有depencies标记,这不是我想要的。如果你看这一点,这就是它拾取多个depencies标记的问题。当我需要特定的依赖项tagsee我仍然获得像p6spy 3.7.0这样的输出,这是逐行分割的…是否有任何方法可以使它像1.3一样在一行中?现在所有的元素都被一行一行地拆分,这会弄乱我现有的xml文档检查问题我已经把Jsoup输出给你看了一个问题你可以在你的答案中更新这个,因为它可以让每个人看到吗?我在打印org.Jsoup.nodes.Document时看到了这个问题$OutputSettings@2437c6dc-->System.out.println(doc_pom.outputSettings().prettyPrint(false));
<project>
    <dependencies>
        <dependency>
            <groupId>com</groupId>
            <artifactId>passwordsdk</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- For Compress JS -->
        <dependency>
            <groupId>com.yahoo.platform.yui</groupId>
            <artifactId>yuicompressor</artifactId>
            <version>2.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>EccpressoFIPSJca</artifactId>
            <version>7.0</version>
        </dependency>

        <dependency>
            <groupId>com.data</groupId>
            <artifactId>EccpressoFIPS</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>tesdt</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.12.0</version>
        </dependency>
    </dependencies>
</project>
import java.io.StringWriter;
import java.nio.file.Files;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.slf4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public static void main (String args[]){
        





 Path c1=Paths.get(prop.getProperty("testPom"));
            Path c2=Paths.get(prop.getProperty("testPomweb"));
            //String pom = readFile(CfoServerModifications.class.getResourceAsStream(prop.getProperty("testPom")));
            //String web = readFile(CfoServerModifications.class.getResourceAsStream(prop.getProperty("testPomweb")));            
            String pomFile = new String(Files.readAllBytes(c1),StandardCharsets.UTF_8);
            String pomWeb = new String(Files.readAllBytes(c2),StandardCharsets.UTF_8);
            Document doc_web = Jsoup.parse(pomWeb,"",Parser.xmlParser());
            Document doc_pom = Jsoup.parse(pomFile,"",Parser.xmlParser());
            doc_pom.outputSettings().prettyPrint(false);
            doc_web.outputSettings().prettyPrint(false);
           // System.out.println(doc_pom.outputSettings().prettyPrint(false));
            Elements dependencies_web = doc_web.select("project>dependencies");
            Elements dependencies_pom = doc_pom.select("project>dependencies");
            //log.info(dependencies_web.toString());
            // remove the old dependencies
            dependencies_pom.clear();
            //log.info("pom clear"+dependencies_pom.toString());
            //add the new dependencies
            dependencies_pom.addAll(dependencies_web);
            //log.info("pom web added to pom "+dependencies_pom.toString());
           
            Files.write(Paths.get(prop.getProperty("dummyfile")),doc_pom.toString().getBytes());
package replacexmlnode;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;


public class ReplaceXmlNode {
    
  public static void main(String[] args) throws IOException {
    
    String pom = readFile(ReplaceNode.class.getResourceAsStream("pom-plain.xml"));
    String web = readFile(ReplaceNode.class.getResourceAsStream("pom-web.xml"));
    
    Document doc_web = Jsoup.parse(web,"",Parser.xmlParser());
    Document doc_pom = Jsoup.parse(pom,"",Parser.xmlParser());
    
    Elements dependencies_web = doc_web.select("project>dependencies");

    //remove old dependencies        
    doc_pom.select("project>dependencies").remove();

    // add new dependencies
    doc_pom.select("project").first().appendChild(dependencies_web.first());       
    
    doc_pom.outputSettings().prettyPrint(false);
    Files.write(Paths.get("pom-plain_out.xml"), doc_pom.toString().getBytes());
 }

  public static String readFile(InputStream in) throws IOException{
   
    return new String(in.readAllBytes(), StandardCharsets.UTF_8);
 }
}