这个xml格式正常吗?愿给100分

「已注销」 2006-09-15 03:19:26
<?xml version="1.0"?>
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://DataSystem.MailboxReceive">
<apptype xmlns="" />
<unitid xmlns="">ORGA000165</unitid>
<taskid xmlns="" />
<taskuserid xmlns="">USER000212</taskuserid>
<sendtime xmlns="">2006-08-16T08:16:18.8726199+08:00</sendtime>
<appdata xmlns="">
<CaseId>0000001371</CaseId>
<CategoryID>GOVERNERBOX</CategoryID>
<CaseSubject>建议立项修筑安徽安庆至浙江建德的铁路</CaseSubject>
<CaseContent>建议立项修筑安徽安庆至浙江建德的铁路</CaseContent>
<CreateDate>2006-08-03</CreateDate>
<State>REPLY</State>
<ReplyPassword>784fd00e</ReplyPassword>
<IsSecret>False</IsSecret>
<Name>程春生</Name>
<Email>chunsheng201@2163.com</Email>
<Address>浙江</Address>
<Telephone>0577-88987738</Telephone>
<Mobile>13057723275</Mobile>
<AnswerContent>铁路建设不属交通厅职权范围,请转交有关部门处理</AnswerContent>
<AnswerTime>0001-01-01</AnswerTime>
<IsEffect>1</IsEffect>
</appdata>
<processinfo xmlns="">
<HandleUnit />
<HandleUser />
<HandleMessage />
<HandleTime>2006-08-16</HandleTime>
</processinfo>
</Root>

上述所某政府部门发布的一个xml文件,要求下属单位来读取\修改最终回传给该政府部门
但我发现,这个xml文件格式好像不大对,我看到的xml文件都是有一个级根,再有另外一个二级根
但上述的这个xml文件只有一个一级根,我对xml很不熟悉,看了xmlBean和Jdom的例子,都是有一个一级根和一个二级根的,所以不知道如何处理,搞了很长时间都没有搞定,希望大家帮忙,谢谢!
...全文
301 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsj01113ng 2006-09-19
  • 打赏
  • 举报
回复
如何新增,修改,删除xml

这些东西 如果你用JDOM做,你最好看JDOM的API文档
上面都有
「已注销」 2006-09-18
  • 打赏
  • 举报
回复
新生成一个xml呢?
「已注销」 2006-09-18
  • 打赏
  • 举报
回复
先结分
manyroads 2006-09-15
  • 打赏
  • 举报
回复
无非是append set remove 这些关键字。看看API就知道了
「已注销」 2006-09-15
  • 打赏
  • 举报
回复
jsj01113ng兄,送佛送到西,再请教如何新增,修改,删除xml,可再加分!
「已注销」 2006-09-15
  • 打赏
  • 举报
回复
jsj01113ng兄,再请教getChild和getChildren有什么区别?
root.getChildren("unitid").getText();仍是空值
但如下就能得到值
String unitid=root.getChild("unitid").getText();
System.out.println(unitid);
String str1=root.getChild("appdata").getChild("CaseSubject").getText();
System.out.println(str1);
「已注销」 2006-09-15
  • 打赏
  • 举报
回复
shenpengbird(魑魅魍魉) 用的是.NET吧,foreach好像是MS的专有语法
shenpengbird 2006-09-15
  • 打赏
  • 举报
回复
首先你的xml格式是没有问题的
取unitid and CaseSubject :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFilePath);
string unitid;
string CaseSubject;

XmlNode root = xmlDoc.DocumentElement;
XmlNodeList nodeList = root.ChildNodes;
foreach (XmlNode node in nodeList)
{
XmlElement xe = (XmlElement)node;
if (xe.Name == "unitid")
{
unitid = xe.InnerText;
}
if (xe.Name == "appdata")
{
XmlNodeList nodeList1 = xe.ChildNodes;
foreach (XmlNode node1 in nodeList1)
{
XmlElement xe1 = (XmlElement)node1;
if (xe1.Name == "CaseSubject")
{
CaseSubject = xe1.InnerText;
}
}
}
}

这个方法很不好 可以用XmlNode.SelectSingleNode 加上XPath直接定位到所要的节点 但是你这个xml的命名空间 我搞不明白
给你个连接 你可研究一下(http://msdn2.microsoft.com/zh-CN/library/h0hw012b.aspx)
谁有好的方法 我也学习一下 其实我也菜鸟
cloudgamer 2006-09-15
  • 打赏
  • 举报
回复
好长阿
jsj01113ng 2006-09-15
  • 打赏
  • 举报
回复
jdom里面unitid不是属性
应该是root.getChildren("unitid").getText();


String str1=root.getChild("appdata").getAttributeValue("CaseSubject");
这里面的CaseSubject也不是属性是getChild
String str1=root.getChild("appdata").getChild("CaseSubject").getText();
「已注销」 2006-09-15
  • 打赏
  • 举报
回复
用xmlBean处理
String filename = "D://060816_081621.xml";
File xmlFile = new File(filename);
RootDocument doc = RootDocument.Factory.parse(xmlFile);
System.out.println(doc);
//居然能把整个xml文件打印出来
String unitid = doc.getRoot().getUnitid();
System.out.println(unitid);
//打印出null
String CaseSubject=doc.getRoot().getAppdata().getCaseSubject();
System.out.println(CaseSubject);
//直接报错

结果:
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://DataSystem.MailboxReceive">

<apptype xmlns=""/>

<unitid xmlns="">ORGA000165</unitid>

<taskid xmlns=""/>

<taskuserid xmlns="">USER000212</taskuserid>

<sendtime xmlns="">2006-08-16T08:16:18.8726199+08:00</sendtime>

<appdata xmlns="">

<CaseId>0000001371</CaseId>

<CategoryID>GOVERNERBOX</CategoryID>

<CaseSubject>建议立项修筑安徽安庆至浙江建德的铁路</CaseSubject>

<CaseContent>建议立项修筑安徽安庆至浙江建德的铁路</CaseContent>

<CreateDate>2006-08-03</CreateDate>

<State>REPLY</State>

<ReplyPassword>784fd00e</ReplyPassword>

<IsSecret>False</IsSecret>

<Name>程春生</Name>

<Email>chunsheng201@2163.com</Email>

<Address>浙江</Address>

<Telephone>0577-88987738</Telephone>

<Mobile>13057723275</Mobile>

<AnswerContent>铁路建设不属交通厅职权范围,请转交有关部门处理</AnswerContent>

<AnswerTime>0001-01-01</AnswerTime>

<IsEffect>1</IsEffect>

</appdata>

<processinfo xmlns="">

<HandleUnit/>

<HandleUser/>

<HandleMessage/>

<HandleTime>2006-08-16</HandleTime>

</processinfo>

</Root>

null

java.lang.NullPointerException
「已注销」 2006-09-15
  • 打赏
  • 举报
回复
比如我要取<unitid xmlns="">ORGA000165</unitid>
代码如下:
Document doc = sb.build("d://060816_081621.xml");
Element root = doc.getRootElement();
String unitid= root.getAttributeValue("unitid");
就是空值
再则取appdata下的CaseSubject,用
String str1=root.getChild("appdata").getAttributeValue("CaseSubject");
也是空值
以上代码用的是jdom,我试过用xmlBean来写,也没有成功

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧