【发布时间】:2014-03-27 18:04:06
【问题描述】:
目前还不能更具体地说明这一点。我是 C# 新手,需要创建一个应用程序来恢复我们的部分数据库...
我有一系列独立的 XML 文件,它们跨越几个不同的文件夹。说 \FOLDER\P_0001\P_000002.xml 然后 \FOLDER\P_0002\P_000065.xml (初始文件夹始终相同,但 P_000X 文件夹的数量始终不同。那些是其中包含多个 XML 文件的文件夹。
这是需要读取的 XML 格式。
<?xml version="1.0" encoding="utf-16"?>
<EXAMS>
<EXAM id="15" majver="1" minver="1" width="1128" height="910">
<NAME xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">Artefact reduced program</NAME>
<PATIENT id="2" />
<OBJECTS>
<TAKE dbid="116" height="1280" width="2648">
<VIEW majver="1" minver="2" maximized="0" x="0" y="122" width="1124" height="653" vx="199" vy="0" vWidth="2248" vHeight="1280" rotation="0" type="XP" regio="01" position="" orientation="" title="01XP 12.03.05: P1A, Ansicht Artefact reduced prog.." macroDbId="1" flippedHoriz="0" flippedVert="0" inverted="0" brightness="0" contrast="0" xPelsPerMeter="9259" yPelsPerMeter="9259" calibrated="0" calibrationFactor="1000">
<PROPERTIES>
<PROPERTY name="NGDevicePluginData" value="" />
<PROPERTY name="NGPostProcessing" value="" />
<PROPERTY name="NGDoseValues" value="" />
</PROPERTIES>
<DIAGNOSIS x="0" y="136" width="0" height="0" />
</VIEW>
</TAKE>
</OBJECTS>
</EXAM>
<EXAM id="16" majver="1" minver="1" width="1128" height="910">
<NAME xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">Ceph</NAME>
<PATIENT id="2" />
<OBJECTS>
<TAKE dbid="120" height="2136" width="2808">
<VIEW majver="1" minver="2" maximized="0" x="4" y="447" width="561" height="440" vx="2" vy="1" vWidth="2805" vHeight="2135" rotation="0" type="XC" regio="03" position="" orientation="" title="03XC 28.07.04: 30x23, Ansicht Ceph" macroDbId="1" flippedHoriz="0" flippedVert="0" inverted="0" brightness="0" contrast="0" xPelsPerMeter="9615" yPelsPerMeter="9615" calibrated="0" calibrationFactor="1000">
<PROPERTIES>
<PROPERTY name="NGDevicePluginData" value="" />
<PROPERTY name="NGPostProcessing" value="" />
<PROPERTY name="NGDoseValues" value="" />
</PROPERTIES>
<DIAGNOSIS x="4" y="460" width="0" height="0" />
</VIEW>
</TAKE>
<TAKE dbid="121" height="2136" width="1756">
<VIEW majver="1" minver="2" maximized="0" x="598" y="450" width="351" height="440" vx="1" vy="1" vWidth="1755" vHeight="2135" rotation="0" type="XC" regio="04" position="" orientation="" title="04XC 23.08.05: -, Ansicht Ceph" macroDbId="1" flippedHoriz="0" flippedVert="0" inverted="0" brightness="0" contrast="0" xPelsPerMeter="9615" yPelsPerMeter="9615" calibrated="0" calibrationFactor="1000">
<PROPERTIES>
<PROPERTY name="NGDevicePluginData" value="" />
<PROPERTY name="NGPostProcessing" value="" />
<PROPERTY name="NGDoseValues" value="" />
</PROPERTIES>
<DIAGNOSIS x="598" y="463" width="0" height="0" />
</VIEW>
</TAKE>
<TAKE dbid="118" height="2136" width="1756">
<VIEW majver="1" minver="2" maximized="0" x="1" y="2" width="351" height="440" vx="1" vy="1" vWidth="1755" vHeight="2135" rotation="0" type="XC" regio="01" position="" orientation="" title="01XC 02.09.04: -, Ansicht Ceph" macroDbId="1" flippedHoriz="0" flippedVert="0" inverted="0" brightness="0" contrast="-9" xPelsPerMeter="9615" yPelsPerMeter="9615" calibrated="0" calibrationFactor="1000">
<PROPERTIES>
<PROPERTY name="NGDevicePluginData" value="" />
<PROPERTY name="NGPostProcessing" value="" />
<PROPERTY name="NGDoseValues" value="" />
</PROPERTIES>
<DIAGNOSIS x="1" y="15" width="0" height="0" />
</VIEW>
</TAKE>
<TAKE dbid="119" height="2136" width="1800">
<VIEW majver="1" minver="2" maximized="0" x="358" y="1" width="360" height="440" vx="0" vy="1" vWidth="1800" vHeight="2135" rotation="0" type="XC" regio="03" position="" orientation="" title="03XC 02.09.04: -, Ansicht Ceph" macroDbId="1" flippedHoriz="0" flippedVert="0" inverted="0" brightness="0" contrast="0" xPelsPerMeter="9615" yPelsPerMeter="9615" calibrated="0" calibrationFactor="1000">
<PROPERTIES>
<PROPERTY name="NGDevicePluginData" value="" />
<PROPERTY name="NGPostProcessing" value="" />
<PROPERTY name="NGDoseValues" value="" />
</PROPERTIES>
<DIAGNOSIS x="358" y="14" width="0" height="0" />
</VIEW>
</TAKE>
</OBJECTS>
</EXAM>
需要做的是读取xml中的某些节点,然后将它们添加到SQL中的不同行中。问题是,名字不一样。比如说,XML中的“NAME”实际上是进入SQL中TGroupRaw表中的tGrpSName......
但我迷路了。我假设我将首先以这种方式将 XML 读入数据集。
string path = "C:\\PDATA\\P_0000\\P_000002.xml";
DataSet ds = new DataSet();
ds.ReadXml(path);
然后我需要找到一种方法将节点映射到不同的名称,然后插入 SQL。 在我完成并正常工作后,我可以找到一种方法来遍历所有单独的 xml 文件并对每个文件执行相同的操作。
但是我迷路了。在不同的事情上工作了大约一个月,但没有任何线索。 有人能给我一些建议让我开始吗?
顺便说一句,我真正需要从 XML 文件中获取的唯一内容是患者 ID、姓名和考试 ID。
【问题讨论】:
-
首先,我会完全忽略 DataSet。那是一种陈旧的技术,会让你误入歧途。
-
谢谢大家!这非常适合让我入门。我不确定我会使用哪种方法,但我现在肯定朝着正确的方向前进!
标签: c# sql sql-server xml