ฉันมักจะใช้ xsd จาก Microsoft เพื่อช่วยสร้าง xsd จากไฟล์. NET ฉันยังแยกวิเคราะห์ส่วนของ xml โดยใช้ xmlstarlet เครื่องมือฟรีสุดท้ายที่จะใช้กับคุณเป็น AltovaXML ซึ่งสามารถดูได้ที่ URL นี้: http://www.altova.com/download_components.html
สิ่งนี้ทำให้ฉันสามารถสแกนไฟล์ xml ทั้งหมดที่เก็บได้ซึ่ง xsd ใช้โดยการแยกวิเคราะห์ xml
# Function:
# verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
# The directory where the schema *.xsd files are located. Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
# Must be in the directory where the configuration files are located
#
verifyschemas()
{
for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
do
local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
if [ $? -ne 0 ]; then
printf "Failed to verify: "
cat ~/temp.txt | tail -1 | tr -d '\r'
printf " - $FILENAME with $SchemaFile\n"
fi
done
}
ในการสร้าง xml ฉันใช้: xsd DOTNET.dll / ประเภท: CFGCLASS & เปลี่ยนชื่อ schema0.xsd CFGCLASS.xsd
เพื่อให้ได้ชื่อ xsd ฉันใช้: xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'
สิ่งนี้ทำให้ฉันสามารถเลือก XSD ที่ถูกต้องโดยใช้แท็กองค์ประกอบภายในไฟล์ xml
ผลลัพธ์สุทธิคือฉันสามารถเรียกใช้ฟังก์ชัน bash เพื่อสแกนไฟล์ XML ทั้งหมดและตรวจสอบได้ แม้ว่าพวกเขาจะอยู่ในหลายไดเรกทอรีย่อย