【发布时间】:2019-11-06 08:21:47
【问题描述】:
我有一个 .sic 文件,其结构类似于 XML,但不完全。我有一个Channel2 部分,我想在其中阅读一些元素。部分是这样的:
.
.
.
<SI name = "Channel2" type = "list">
<SI name = "SecsPortConfig" type = "list">
<SI name = "PortType" type = "string">'XXX'</SI>
<SI name = "Protocol" type = "string">'XXX'</SI>
<SI name = "Serial" type = "list">
<SI name = "Port" type = "int">'XXX'</SI>
<SI name = "Speed" type = "int">'XXXX'</SI>
</SI>
<SI name = "Socket" type = "list">
<SI name = "ConnectionMode" type = "string">'XXX'</SI>
<SI name = "LocalHost" type = "string">'XXX.XXX.XXX.XXX'</SI>
<SI name = "LocalPort" type = "int">'XXX'</SI>
<SI name = "RemoteHost" type = "string">'XXX.XXX.XXX'</SI>
<SI name = "RemotePort" type = "int">'XXX'</SI>
</SI>
<SI name = "HSMS" type = "list">
<SI name = "T5" type = "int">'XXX'</SI>
<SI name = "T6" type = "int">'XXX'</SI>
<SI name = "T7" type = "int">'XXX'</SI>
<SI name = "T8" type = "int">'XXX'</SI>
<SI name = "LinkTestTime" type = "int">'XXX'</SI>
</SI>
<SI name = "SECSI" type = "list">
<SI name = "T1" type = "int">'XXX'</SI>
<SI name = "T2" type = "int">'XXX'</SI>
<SI name = "T4" type = "int">'XXX'</SI>
<SI name = "RTY" type = "int">'XXX'</SI>
<SI name = "IsHost" type = "bool">'XXX'</SI>
<SI name = "IsMaster" type = "bool">'XXX'</SI>
<SI name = "InterleaveBlocks" type = "bool">'XXX'</SI>
</SI>
<SI name = "SECSII" type = "list">
<SI name = "DeviceID" type = "int">'XXX'</SI>
<SI name = "T3" type = "int">'XXX'</SI>
<SI name = "MultipleOpen" type = "bool">'XXX'</SI>
<SI name = "AutoDeviceID" type = "bool">'XXX'</SI>
</SI>
<SI name = "Log" type = "list">
<SI name = "LogCharError" type = "bool">'XXX'</SI>
<SI name = "LogCharEvent" type = "bool">'XXX'</SI>
<SI name = "LogCharReceive" type = "bool">'XXX'</SI>
<SI name = "LogCharSend" type = "bool">'XXX'</SI>
<SI name = "LogSecsIHsmsError" type = "bool">'XXX'</SI>
<SI name = "LogSecsIHsmsEvent" type = "bool">'XXX'</SI>
<SI name = "LogSecsIHsmsReceive" type = "bool">'XXX'</SI>
<SI name = "LogSecsIHsmsSend" type = "bool">'XXX'</SI>
<SI name = "LogSecsIIError" type = "bool">'XXX'</SI>
<SI name = "LogSecsIIEvent" type = "bool">'XXX'</SI>
<SI name = "LogSecsIIReceive" type = "bool">'XXX'</SI>
<SI name = "LogSecsIISend" type = "bool">'XXX'</SI>
</SI>
</SI>
<SI name = "UseSeparateSECSLogFile" type = "bool">'XXX'</SI>
<SI name = "Connected" type = "bool">'XXX'</SI>
<SI name = "MessageFilters" type = "list">
<SI name = "DeviceIDList" type = "list"/>
<SI name = "StreamFunctionList" type = "list"/>
</SI>
<SI name = "SafeMessageFilters" type = "list">
<SI name = "DeviceIDList" type = "list"/>
<SI name = "StreamFunctionList" type = "list"/>
</SI>
</SI>
.
.
.
如果它是一个 xml 文件,我可以解析它并读出元素,但是我该如何处理这种文件呢?
我想提取元素RemoteHost 和RemotePort。
我现在使用 BufferedReader 进行了尝试,并从文件中获取了 Section Channel2,并将此部分插入到字符串中,但是如何提取我想要的元素的特定值?我可能可以使用子字符串和其他一些字符串方法来做到这一点,但没有更简单的方法吗?
到目前为止,这是我的代码:
File file = new File("C:\\Users\\but\\Desktop\\ExternalswPassThroughSrv.sic");
int counter = 0;
BufferedReader br = new BufferedReader(new FileReader(file));
String cl;
String finalString = "";
while ((cl = br.readLine()) != null) {
if (cl.contains("Channel2")) {
counter = 63;
}
if(counter != 0){
//System.out.println(cl);
finalString += cl + "\n";
counter--;
}
}
System.out.println(finalString);
【问题讨论】:
-
"如何处理这种文件?" - 就像所有其他 xml 文件一样。您是否研究过解析此文件以及如何使用 xpath 语句查找元素?
-
也许我是瞎子……但是,为什么这不是 XML 文件?
-
您向我们展示的部分似乎是格式良好的 XML。我很困惑这个问题是关于什么的。
-
它以 xml 格式形成,但它们不像普通 xml 那样被标记。使用 DOM 解析器时应该如何获取元素?我可以解析它,但像 getElementsByTagName 这样的方法无法读取元素。一个普通的 xml 文件如下所示: '
. 。我要读取的文件总是以 SI 名称开头,所以我不知道如何访问元素。Lokesh Gupta India