获取oracle 获取xmltpye节点中的属性值
<doc><sdelementid=""token="840a3605-a6c7-47a5-863f-b92ed763a261"cname="随访方式"fieldtype...
<doc>
<sdelement id="" token="840a3605-a6c7-47a5-863f-b92ed763a261" cname="随访方式" fieldtype="1" biztype="6" value=""/>
<sdelement id="" token="2bae7759-2087-4686-8cbb-aa257c827523" cname="症状" fieldtype="1" biztype="6" value=""/>
<sdelement id="" token="4b282e79-9949-44f0-a4a9-80c028e0e55e" cname="心理调整" fieldtype="1" biztype="6" value=""/>
</doc>
我想获取 token="4b282e79-9949-44f0-a4a9-80c028e0e55e" 节点中的 canme的值
整个 xml是纯在数据库中的xmltype字段.在数据中字段名为附加信息 展开
<sdelement id="" token="840a3605-a6c7-47a5-863f-b92ed763a261" cname="随访方式" fieldtype="1" biztype="6" value=""/>
<sdelement id="" token="2bae7759-2087-4686-8cbb-aa257c827523" cname="症状" fieldtype="1" biztype="6" value=""/>
<sdelement id="" token="4b282e79-9949-44f0-a4a9-80c028e0e55e" cname="心理调整" fieldtype="1" biztype="6" value=""/>
</doc>
我想获取 token="4b282e79-9949-44f0-a4a9-80c028e0e55e" 节点中的 canme的值
整个 xml是纯在数据库中的xmltype字段.在数据中字段名为附加信息 展开
2个回答
展开全部
实现思路:可以通过w3c的dom解析器进行操作,之后通过getName获取到xmltpye中的属性值。
举例:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomTest1
{
public static void main(String[] args) throws Exception
{
// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// System.out.println("class name: " + dbf.getClass().getName());
// step 2:获得具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// System.out.println("class name: " + db.getClass().getName());
// step3: 解析一个xml文档,获得Document对象(根结点)
Document document = db.parse(new File("candidate.xml"));
NodeList list = document.getElementsByTagName("PERSON");
for(int i = 0; i < list.getLength(); i++)
{
Element element = (Element)list.item(i);
String content = element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();
System.out.println("name:" + content);
System.out.println("--------------------------------------");
}
}
}
举例:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomTest1
{
public static void main(String[] args) throws Exception
{
// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// System.out.println("class name: " + dbf.getClass().getName());
// step 2:获得具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// System.out.println("class name: " + db.getClass().getName());
// step3: 解析一个xml文档,获得Document对象(根结点)
Document document = db.parse(new File("candidate.xml"));
NodeList list = document.getElementsByTagName("PERSON");
for(int i = 0; i < list.getLength(); i++)
{
Element element = (Element)list.item(i);
String content = element.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();
System.out.println("name:" + content);
System.out.println("--------------------------------------");
}
}
}
展开全部
把xml修改这样
<doc>
<sdelement id="" token="840a3605-a6c7-47a5-863f-b92ed763a261" cname="" fieldtype="1" biztype="6" >随访方式</sdelement>
<sdelement id="" token="2bae7759-2087-4686-8cbb-aa257c827523" cname="" fieldtype="1" biztype="6">症状</sdelement>
<sdelement id="" token="4b282e79-9949-44f0-a4a9-80c028e0e55e" cname="" fieldtype="1" biztype="6">心理调整</sdelement>
</doc>
用下边这条sql可以查询出来
select extractvalue(字段名,'/doc/sdelement[@token="840a3605-a6c7-47a5-863f-b92ed763a261"]') from 表名;
<doc>
<sdelement id="" token="840a3605-a6c7-47a5-863f-b92ed763a261" cname="" fieldtype="1" biztype="6" >随访方式</sdelement>
<sdelement id="" token="2bae7759-2087-4686-8cbb-aa257c827523" cname="" fieldtype="1" biztype="6">症状</sdelement>
<sdelement id="" token="4b282e79-9949-44f0-a4a9-80c028e0e55e" cname="" fieldtype="1" biztype="6">心理调整</sdelement>
</doc>
用下边这条sql可以查询出来
select extractvalue(字段名,'/doc/sdelement[@token="840a3605-a6c7-47a5-863f-b92ed763a261"]') from 表名;
追问
你说这种方式我知道. 现在数据库里面就是这样的结构不能修改.
追答
select substr(a,instr(a,'cname="')+7,instr(a,'" fieldtype')-instr(a,'cname="')-7)
from (SELECT value(i) as a
FROM 表名, table(XMLSEQUENCE(extract(列名, '/doc/sdelement'))) i)
where a like '%'||'token="2bae7759-2087-4686-8cbb-aa257c827523"'||'%';
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询