gpt4 book ai didi

c# - 如何使用 C# 根据 HR-XML 验证 XML 文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:16:37 24 4
gpt4 key购买 nike

我正在寻找一些验证 HR-XML 的建议和指导。

我已经编写了生成 XML 文件的代码,该文件“应该”被正确格式化为 HR-XML,但我想在编写之前使用代码对其进行验证到磁盘。

下面是我的验证方法和验证错误事件处理程序的代码示例

/// <summary>
/// Validate the populated XML
/// </summary>
/// <remarks>
/// The schema folder needs to be "HR-XML-3_0" which contains the "org_hr-xml" and "org_openapplications_platform" folders
/// </remarks>
/// <param name="schemaPath">The root path for the HR-XML XSD files for the xml to be validated against</param>
/// <returns>true if the xml is valid, else false</returns>
public bool Validate(string schemaPath)
{
try
{
// Initalise the valid flag
this.m_FormatValid = false;
this.m_ValidationErrors.Clear();

// Check if there is anything to output
if (this.m_Root.HasElements == true)
{
// Validate that the root node has been populated correctly
XDocument doc = new XDocument(m_Root);

XmlSchemaSet schemas = new XmlSchemaSet();

// Add the schemas in the specified folder to the schema set
schemas.Add(XmlSchema.Read(new StreamReader(Path.Combine(schemaPath, @"org_hr-xml\3_0\Developer\BODs\RespondHRMasterData.xsd")), null));
schemas.Add(XmlSchema.Read(new StreamReader(Path.Combine(schemaPath, @"org_openapplications_platform\1_1\Common\OAGi\Components\Meta.xsd")), null));

// Set the valid flag to true prior to validation and let the event handler set it to false if it's not valid
this.m_FormatValid = true;

doc.Validate(schemas, HRXML_Validation_Error);
}
else
{
Log.WriteLine(Category.Info, "No HR-XML data to validate");
}
}
catch (Exception ex)
{
this.m_FormatValid = false;
Log.WriteLine(Category.Warning, "An error was detected whilst validating HR-XML data", ex);
}

return this.m_FormatValid;
}



/// <summary>
/// Event handler for XML validation errors
/// </summary>
void HRXML_Validation_Error(Object source, ValidationEventArgs args)
{
// There is no need to worry about the severity of the validation as they should always be errors
// The warning appears only to be triggered is no schema has been specified which shouyldn't be the case here

// Output the message to the validation list
this.m_ValidationErrors.Add( args.Message );

//Set the Valid flag to false
m_FormatValid = false;
}

我将用于响应 HRMasrterData 请求的 BOD 添加到架构集中,但是由于 RespondHRMasterData.xsd 文件中引用的导入架构,这会生成异常。错误是未定义的复杂类型“http://www.openapplications.org/oagis/9:BusinessObjectDocumentType”用作复杂类型扩展的基础。

将第二个文件添加到模式集中解决了第一个异常并给出了这个异常。类型“http://www.openapplications.org/oagis/9:NormalizedStringType”未声明,或者不是简单类型。

我不该做的是在创建的文件出现“实际”错误之前添加所有 HR-XML 模式文件(除非我真的必须这样做)。

我走在正确的轨道上还是有更好的方法?

谢谢。

最佳答案

我发现验证 HR-XML 的最佳方法是将节点 xsi:schemaLocation 添加到生成的指向所需 BOD 的 xml。

也可以创建一个引用了所有架构文件的 XML Spy 项目。如果这样做,则不需要架构位置。

关于c# - 如何使用 C# 根据 HR-XML 验证 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com