利用JS或Java从XML提取指定标签

XML

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:flowable="http://flowable.org/bpmn" id="diagram_Process_1723298039098" targetNamespace="http://flowable.org/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="Process_1723298039098" name="业务流程_1723298039098" isExecutable="true">
    <bpmn2:extensionElements>
      <flowable:properties>
        <flowable:property name="url1" value="1" />
      </flowable:properties>
    </bpmn2:extensionElements>
    <bpmn2:startEvent id="Event_0tqbijg" name="开始" flowable:formKey="">
      <bpmn2:extensionElements>
        <flowable:properties />
      </bpmn2:extensionElements>
      <bpmn2:outgoing>Flow_1ihpm7s</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:endEvent id="Event_1c9fm52" name="结束">
      <bpmn2:incoming>Flow_0dptcr4</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="Flow_1ihpm7s" sourceRef="Event_0tqbijg" targetRef="Activity_1lnm3cz" />
    <bpmn2:sequenceFlow id="Flow_0dptcr4" sourceRef="Activity_1lnm3cz" targetRef="Event_1c9fm52" />
    <bpmn2:serviceTask id="Activity_1lnm3cz">
      <bpmn2:extensionElements>
        <flowable:properties>
          <flowable:property name="script1" value="flood.json in Task" />
        </flowable:properties>
      </bpmn2:extensionElements>
      <bpmn2:incoming>Flow_1ihpm7s</bpmn2:incoming>
      <bpmn2:outgoing>Flow_0dptcr4</bpmn2:outgoing>
    </bpmn2:serviceTask>
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1723298039098">
      <bpmndi:BPMNEdge id="Flow_0dptcr4_di" bpmnElement="Flow_0dptcr4">
        <di:waypoint x="580" y="170" />
        <di:waypoint x="652" y="170" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1ihpm7s_di" bpmnElement="Flow_1ihpm7s">
        <di:waypoint x="368" y="170" />
        <di:waypoint x="480" y="170" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Event_0tqbijg_di" bpmnElement="Event_0tqbijg">
        <dc:Bounds x="332" y="152" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="339" y="195" width="23" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1c9fm52_di" bpmnElement="Event_1c9fm52">
        <dc:Bounds x="652" y="152" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="659" y="195" width="23" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0si3krp_di" bpmnElement="Activity_1lnm3cz">
        <dc:Bounds x="480" y="130" width="100" height="80" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Javascript方法

要从给定的XML文件中提取 <flowable:property name="url1" value="1"> 标签的内容,你可以使用JavaScript中的DOM解析器(如DOMParser)来解析XML字符串,并遍历DOM树来找到特定的元素。但是,请注意,XML中的属性名(如namevalue)在JavaScript中应该是小写的,因为XML命名空间前缀(如flowable:)在JavaScript中通常被忽略,并且属性名在DOM中通常是小写的(这取决于浏览器和XML的解析方式,但大多数情况下是这样)。

然而,在这个特定的例子中,由于我们使用的是带有命名空间的属性,我们需要特别注意如何选择和访问这些属性。

以下是一个使用DOMParser和XPath(通过evaluate方法)来提取<flowable:property name="url1" value="1">标签中value属性的值的JavaScript示例:

// 假设xmlString是你的XML字符串  
const xmlString = `<?xml version="1.0" encoding="UTF-8"?>  
<bpmn2:definitions ...>  
  ...  
  <bpmn2:process>  
    ...  
    <bpmn2:extensionElements>  
      <flowable:properties>  
        <flowable:property name="url1" value="1" />  
      </flowable:properties>  
    </bpmn2:extensionElements>  
    ...  
  </bpmn2:process>  
  ...  
</bpmn2:definitions>`;  
  
// 使用DOMParser解析XML字符串  
const parser = new DOMParser();  
const xmlDoc = parser.parseFromString(xmlString, "text/xml");  
  
// 创建一个XPathEvaluator对象(在Chrome等浏览器中可用)  
const xpathEvaluator = new XPathEvaluator();  
  
// 定义XPath查询,注意命名空间的使用  
const nsResolver = xmlDoc.createNSResolver(xmlDoc.documentElement);  
nsResolver.lookupNamespaceURI('flowable') = 'http://flowable.org/bpmn';  
  
// XPath查询,查找具有特定name属性的flowable:property元素  
const xpathExpr = "//flowable:property[@name='url1']";  
const result = xpathEvaluator.evaluate(xpathExpr, xmlDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);  
  
// 如果找到了匹配的节点,则获取其value属性  
if (result.singleNodeValue) {  
    const value = result.singleNodeValue.getAttribute('value');  
    console.log(value); // 输出: 1  
} else {  
    console.log('未找到匹配的节点');  
}

请注意,这个示例使用了XPath来定位具有特定name属性的<flowable:property>元素。XPath是一种在XML文档中查找信息的语言,它非常强大且灵活。在这个例子中,我们创建了一个nsResolver来解析命名空间,因为XPath查询需要知道如何解析flowable:前缀。

然而,需要注意的是,并非所有JavaScript环境都内置了对XPath的支持(尽管大多数现代浏览器都支持)。如果你在一个不支持XPath的环境中工作(如Node.js的某些版本),你可能需要使用第三方库(如xpath)来执行XPath查询。

Java方法

要从给定的XML文件中提取<flowable:property name="url1" value="1">标签的内容,你可以使用Java的DOM(Document Object Model)解析器。以下是一个简单的Java程序示例,它加载XML文件,然后遍历DOM树以查找并打印出name="url1"<flowable:property>标签的value属性。

首先,确保你的项目中已经包含了处理XML所需的库。如果你使用的是标准的Java SE环境,那么这些库是内置的。

import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import javax.xml.xpath.XPath;  
import javax.xml.xpath.XPathConstants;  
import javax.xml.xpath.XPathExpression;  
import javax.xml.xpath.XPathFactory;  
import org.w3c.dom.Document;  
import org.w3c.dom.NodeList;  
  
public class XMLPropertyExtractor {  
  
    public static void main(String[] args) {  
        try {  
            // 加载和解析XML文件  
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
            DocumentBuilder builder = factory.newDocumentBuilder();  
            Document doc = builder.parse("path_to_your_file.xml"); // 替换为你的文件路径  
  
            // 创建XPath对象  
            XPath xPath = XPathFactory.newInstance().newXPath();  
  
            // 定义XPath表达式来查找name为"url1"的<flowable:property>标签  
            String expression = "//flowable:property[@name='url1']/@value";  
  
            // 执行XPath查询  
            XPathExpression xPathExpr = xPath.compile(expression);  
            String result = (String) xPathExpr.evaluate(doc, XPathConstants.STRING);  
  
            // 打印结果  
            System.out.println("url1的值是: " + result);  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

注意:

  1. 你需要将"path_to_your_file.xml"替换为你的XML文件的实际路径。
  2. 上述代码中使用了XPath来快速定位到指定的元素和属性。XPath表达式//flowable:property[@name='url1']/@value的含义是:查找文档中所有name属性为url1flowable:property元素的value属性。
  3. 这个示例假设XML文件中的命名空间是正确声明的,并且XPath表达式中使用了这些命名空间。由于<bpmn2:definitions><flowable:properties>等元素使用了命名空间,所以XPath表达式也需要包含这些命名空间的前缀。如果你的环境中没有自动处理命名空间(有些XPath处理器可能需要特别设置),你可能需要注册命名空间前缀到XPath对象。

如果你的XPath处理器没有自动处理命名空间,你可能需要这样做:

XPathFactory factory = XPathFactory.newInstance();  
XPath xpath = factory.newXPath();  
xpath.setNamespaceContext(new NamespaceContext() {  
    @Override  
    public String getNamespaceURI(String prefix) {  
        if ("bpmn2".equals(prefix)) {  
            return "http://www.omg.org/spec/BPMN/20100524/MODEL";  
        } else if ("flowable".equals(prefix)) {  
            return "http://flowable.org/bpmn";  
        }  
        return null;  
    }  
  
    @Override  
    public String getPrefix(String namespaceURI) {  
        return null; // 不需要反向查找  
    }  
  
    @Override  
    public Iterator<String> getPrefixes(String namespaceURI) {  
        return null; // 不需要反向查找  
    }  
});

然后将这个XPath对象用于你的查询。不过,在许多标准Java环境中,命名空间前缀和URI通常会被自动解析,因此你可能不需要手动设置它们。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用JavaScript(简称JS)将账号和密码以XML格式传输到后端。首先,在前端的HTML页面中引入JS脚本,并通过JS获取用户输入的账号和密码。然后,可以使用JS中的XMLHttpRequest对象创建一个HTTP请求,并指定后端服务器的URL地址。接下来,可以使用JS将账号和密码封装成一个XML格式的数据,并通过请求的send()方法将数据发送给后端。 在后端的Java代码中,可以使用Servlet或者其他框架来接收前端发送的HTTP请求。一旦接收到请求,可以通过Java中的XML解析库,如DOM或SAX,解析接收到的XML数据。从XML提取出账号和密码的值,并进行相关的验证或存储操作。如果账号和密码验证成功,后端可以返回一个表示登录成功的响应给前端,反之返回一个表示登录失败的响应。 需要注意的是,使用XML格式传输账号和密码需要进行一定的安全防护措施,以避免信息泄露或被黑客攻击。可以考虑使用加密算法对账号和密码进行加密,在前端加密后的数据再传输到后端,后端对接收到的加密数据进行解密。此外,还可以在JS和后端之间使用SSL/TLS等加密协议来保证数据传输的安全性。 总而言之,通过前端的JS将账号和密码以XML格式传输到后端的Java应用程序,在后端进行解析和验证,可以实现基本的账号和密码输入功能,并确保数据传输的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值